{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import time, sys\n",
    "\n",
    "# Import the Qiskit \n",
    "from qiskit import QuantumCircuit, ClassicalRegister, QuantumRegister, QiskitError\n",
    "from qiskit import execute, IBMQ, BasicAer, transpiler, Aer\n",
    "from qiskit.providers.ibmq import least_busy\n",
    "from qiskit.tools.monitor import job_monitor\n",
    "from qiskit.mapper import Layout\n",
    "\n",
    "import numpy as np\n",
    "import qiskit"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Define your backend"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Remote backend \"ibmqx_qasm_simulator\" could not be instantiated due to an invalid config: {'memory': ['Missing data for required field.'], 'open_pulse': ['Missing data for required field.'], 'local': ['Missing data for required field.'], 'basis_gates': ['Missing data for required field.'], 'n_qubits': ['Missing data for required field.'], 'backend_name': ['Missing data for required field.'], 'max_shots': ['Missing data for required field.'], 'conditional': ['Missing data for required field.'], 'backend_version': ['Missing data for required field.'], 'gates': {0: {'qasm_def': ['Missing data for required field.'], 'name': ['Missing data for required field.'], 'parameters': ['Missing data for required field.']}}}\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Available backends:\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[<IBMQSimulator('ibmq_qasm_simulator') from IBMQ(ibm-q-ornl, bes-qis, argonne)>,\n",
       " <IBMQBackend('ibmq_20_tokyo') from IBMQ(ibm-q-ornl, bes-qis, argonne)>,\n",
       " <IBMQBackend('ibmq_poughkeepsie') from IBMQ(ibm-q-ornl, bes-qis, argonne)>]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from qiskit import IBMQ\n",
    "\n",
    "# insert your token & URL here\n",
    "IBMQ.enable_account('<token>',\n",
    "                    url='<url>')\n",
    "\n",
    "# check available backends\n",
    "print(\"Available backends:\")\n",
    "IBMQ.backends()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Define the layout"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ibmq_20_tokyo\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "BackendStatus(backend_name='ibmq_20_tokyo', backend_version='1.2.6', operational=True, pending_jobs=0, status_msg='active')"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# execute on the IBM Tokyo 20 Qubit Machine\n",
    "#backend = IBMQ.get_backend('ibmq_qasm_simulator')\n",
    "backend = IBMQ.get_backend('ibmq_20_tokyo')\n",
    "print(backend)\n",
    "backend.status()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Define the UCCSD ansatz circuit"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "def get_ucc_ansatz(theta):\n",
    "    circuit = QuantumCircuit(2, 2)\n",
    "    circuit.x(0)\n",
    "    circuit.ry(theta, 1)\n",
    "    circuit.cx(1, 0)\n",
    "    return circuit"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Define the naive measurement circuits"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "shots1 = 1000\n",
    "\n",
    "def measure_zi_simple(theta, ZI_job_IDs):\n",
    "    circuit = get_ucc_ansatz(theta)\n",
    "    circuit.measure(0, 0)\n",
    "    circuit.measure(1, 1)\n",
    "    job = qiskit.execute(circuit, backend=backend, shots=shots1)\n",
    "    print(job.job_id())\n",
    "    ZI_job_IDs.append(job.job_id())\n",
    "    \n",
    "def measure_iz_simple(theta, IZ_job_IDs):\n",
    "    circuit = get_ucc_ansatz(theta)\n",
    "    circuit.measure(0, 0)\n",
    "    circuit.measure(1, 1)\n",
    "    job = qiskit.execute(circuit, backend=backend, shots=shots1)\n",
    "    print(job.job_id())\n",
    "    IZ_job_IDs.append(job.job_id())\n",
    "    \n",
    "def measure_xx_simple(theta, XX_job_IDs):\n",
    "    circuit = get_ucc_ansatz(theta)\n",
    "    circuit.h(0)\n",
    "    circuit.h(1)\n",
    "    circuit.measure(0, 0)\n",
    "    circuit.measure(1, 1)\n",
    "    job = qiskit.execute(circuit, backend=backend, shots=shots1)\n",
    "    print(job.job_id())\n",
    "    XX_job_IDs.append(job.job_id())\n",
    "\n",
    "def measure_yy_simple(theta, YY_job_IDs):\n",
    "    circuit = get_ucc_ansatz(theta)\n",
    "    circuit.h(0)\n",
    "    circuit.sdg(0)\n",
    "    circuit.h(1)\n",
    "    circuit.sdg(1)\n",
    "    circuit.measure(0, 0)\n",
    "    circuit.measure(1, 1)\n",
    "    job = qiskit.execute(circuit, backend=backend, shots=shots1)\n",
    "    print(job.job_id())\n",
    "    YY_job_IDs.append(job.job_id())\n",
    "\n",
    "def measure_hamiltonian_simple(theta, ZI_job_IDs, IZ_job_IDs, XX_job_IDs, YY_job_IDs):\n",
    "    measure_zi_simple(theta, ZI_job_IDs)\n",
    "    measure_iz_simple(theta, IZ_job_IDs)\n",
    "    measure_xx_simple(theta, XX_job_IDs)\n",
    "    measure_yy_simple(theta, YY_job_IDs)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Define the simultaneous measurement circuits"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "shots2 = 2000\n",
    "\n",
    "def measure_zi_and_iz(theta, ZI_and_IZ_job_IDs):\n",
    "    circuit = get_ucc_ansatz(theta)\n",
    "    circuit.measure(0, 0)\n",
    "    circuit.measure(1, 1)\n",
    "    job = qiskit.execute(circuit, backend=backend, shots=shots2)\n",
    "    print(job.job_id())\n",
    "    ZI_and_IZ_job_IDs.append(job.job_id())\n",
    "    \n",
    "def measure_xx_and_yy(theta, XX_and_YY_job_IDs):\n",
    "    circuit = get_ucc_ansatz(theta)\n",
    "    circuit.cx(0, 1)\n",
    "    circuit.h(0)\n",
    "    circuit.measure(0, 0)\n",
    "    circuit.measure(1, 1)\n",
    "    job = qiskit.execute(circuit, backend=backend, shots=shots2)\n",
    "    print(job.job_id())\n",
    "    XX_and_YY_job_IDs.append(job.job_id())\n",
    "\n",
    "def measure_simultaneously_hamiltonian_simple(theta, ZI_and_IZ_job_IDs, XX_and_YY_job_IDs):\n",
    "    measure_zi_and_iz(theta, ZI_and_IZ_job_IDs)\n",
    "    measure_xx_and_yy(theta, XX_and_YY_job_IDs)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Submit the job to Qiskit and get the job IDs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-3.141592653589793\n",
      "5d3cb9064610b6001873ff28\n",
      "5d3cb9106c947600181bb431\n",
      "5d3cb9185e9f6500181e752d\n",
      "5d3cb9235e9f6500181e752f\n",
      "5d3cb92b6c947600181bb433\n",
      "5d3cb932b61d040018076b59\n",
      "-2.8797932657906435\n",
      "5d3cb9385e9f6500181e7531\n",
      "5d3cb9415e9f6500181e7533\n",
      "5d3cb94a9bb742001ac32daf\n",
      "5d3cb953b61d040018076b5b\n",
      "5d3cb95bb411ea00186e46eb\n",
      "5d3cb9655e9f6500181e7535\n",
      "-2.617993877991494\n",
      "5d3cb96fa06411001849a903\n",
      "5d3cb9779bb742001ac32db1\n",
      "5d3cb97f6c947600181bb435\n",
      "5d3cb9884610b6001873ff2a\n",
      "5d3cb991b61d040018076b5d\n",
      "5d3cb99bf22d1200183f9f45\n",
      "-2.3561944901923444\n",
      "5d3cb9a39bb742001ac32db3\n",
      "5d3cb9ac6c947600181bb437\n",
      "5d3cb9b45e9f6500181e7537\n",
      "5d3cb9beb411ea00186e46ed\n",
      "5d3cb9c8f22d1200183f9f47\n",
      "5d3cb9cf9bb742001ac32db5\n",
      "-2.094395102393195\n",
      "5d3cb9d9fb29900018d5fb0c\n",
      "5d3cb9e1b411ea00186e46ef\n",
      "5d3cb9eaf22d1200183f9f49\n",
      "5d3cb9f04610b6001873ff2c\n",
      "5d3cb9fb9bb742001ac32db7\n",
      "5d3cba04f22d1200183f9f4b\n",
      "-1.8325957145940452\n",
      "5d3cba0cb61d040018076b5f\n",
      "5d3cba159bb742001ac32db9\n",
      "5d3cba1fa06411001849a905\n",
      "5d3cba26b411ea00186e46f1\n",
      "5d3cba305e9f6500181e7539\n",
      "5d3cba39b411ea00186e46f3\n",
      "-1.5707963267948957\n",
      "5d3cba3e5e9f6500181e753b\n",
      "5d3cba46a06411001849a907\n",
      "5d3cba4e5e9f6500181e753d\n",
      "5d3cba55fb29900018d5fb0e\n",
      "5d3cba5ca06411001849a909\n",
      "5d3cba64b61d040018076b61\n",
      "-1.308996938995746\n",
      "5d3cba6efb29900018d5fb10\n",
      "5d3cba74b61d040018076b63\n",
      "5d3cba7bf22d1200183f9f4d\n",
      "5d3cba86b411ea00186e46f5\n",
      "5d3cba8db411ea00186e46f7\n",
      "5d3cba96b411ea00186e46f9\n",
      "-1.0471975511965965\n",
      "5d3cba9cf22d1200183f9f4f\n",
      "5d3cbaa56c947600181bb439\n",
      "5d3cbaaea06411001849a90b\n",
      "5d3cbab95e9f6500181e753f\n",
      "5d3cbac2b61d040018076b65\n",
      "5d3cbacd5e9f6500181e7541\n",
      "-0.785398163397447\n",
      "5d3cbad4f8ffa90019ad2c6a\n",
      "5d3cbadaf8ffa90019ad2c6c\n",
      "5d3cbae1fb29900018d5fb12\n",
      "5d3cbaeaa06411001849a90d\n",
      "5d3cbaf0fb29900018d5fb14\n",
      "5d3cbaf7b411ea00186e46fb\n",
      "-0.5235987755982974\n",
      "5d3cbb034610b6001873ff2e\n",
      "5d3cbb0b6c947600181bb43b\n",
      "5d3cbb13f8ffa90019ad2c6e\n",
      "5d3cbb195e9f6500181e7543\n",
      "5d3cbb206c947600181bb43d\n",
      "5d3cbb29b61d040018076b67\n",
      "-0.2617993877991478\n",
      "5d3cbb31f22d1200183f9f51\n",
      "5d3cbb38f8ffa90019ad2c70\n",
      "5d3cbb425e9f6500181e7545\n",
      "5d3cbb4ab61d040018076b69\n",
      "5d3cbb52a06411001849a90f\n",
      "5d3cbb586c947600181bb43f\n",
      "1.7763568394002505e-15\n",
      "5d3cbb61f22d1200183f9f53\n",
      "5d3cbb695e9f6500181e7547\n",
      "5d3cbb71a06411001849a911\n",
      "5d3cbb79b411ea00186e46fd\n",
      "5d3cbb824610b6001873ff30\n",
      "5d3cbb88b411ea00186e46ff\n",
      "0.26179938779915135\n",
      "5d3cbb90a06411001849a913\n",
      "5d3cbb99b411ea00186e4701\n",
      "5d3cbba35e9f6500181e7549\n",
      "5d3cbbada06411001849a915\n",
      "5d3cbbb59bb742001ac32dbb\n",
      "5d3cbbbcb411ea00186e4703\n",
      "0.5235987755983009\n",
      "5d3cbbc5a06411001849a917\n",
      "5d3cbbcb5e9f6500181e754b\n",
      "5d3cbbd6f22d1200183f9f55\n",
      "5d3cbbdeb411ea00186e4705\n",
      "5d3cbbe86c947600181bb441\n",
      "5d3cbbf2f8ffa90019ad2c72\n",
      "0.7853981633974505\n",
      "5d3cbbfca06411001849a919\n",
      "5d3cbc03b411ea00186e4707\n",
      "5d3cbc09f8ffa90019ad2c74\n",
      "5d3cbc125e9f6500181e754d\n",
      "5d3cbc19b411ea00186e4709\n",
      "5d3cbc205e9f6500181e754f\n",
      "1.0471975511966\n",
      "5d3cbc264610b6001873ff32\n",
      "5d3cbc2e6c947600181bb443\n",
      "5d3cbc33fb29900018d5fb16\n",
      "5d3cbc3df8ffa90019ad2c76\n",
      "5d3cbc444610b6001873ff34\n",
      "5d3cbc4eb411ea00186e470b\n",
      "1.3089969389957492\n",
      "5d3cbc549bb742001ac32dbd\n",
      "5d3cbc5d9bb742001ac32dbf\n",
      "5d3cbc655e9f6500181e7551\n",
      "5d3cbc6fb411ea00186e470d\n",
      "5d3cbc784610b6001873ff36\n",
      "5d3cbc7d6c947600181bb445\n",
      "1.5707963267948992\n",
      "5d3cbc84b411ea00186e470f\n",
      "5d3cbc8da06411001849a91b\n",
      "5d3cbc97fb29900018d5fb18\n",
      "5d3cbc9eb61d040018076b6b\n",
      "5d3cbca95e9f6500181e7553\n",
      "5d3cbcadb61d040018076b6d\n",
      "1.8325957145940492\n",
      "5d3cbcb24610b6001873ff38\n",
      "5d3cbcb7f8ffa90019ad2c78\n",
      "5d3cbcbcf8ffa90019ad2c7a\n",
      "5d3cbcc3a06411001849a91d\n",
      "5d3cbccafb29900018d5fb1a\n",
      "5d3cbcd0a06411001849a91f\n",
      "2.0943951023931984\n",
      "5d3cbcd55e9f6500181e7555\n",
      "5d3cbcdc5e9f6500181e7557\n",
      "5d3cbce3a06411001849a921\n",
      "5d3cbcebf22d1200183f9f57\n",
      "5d3cbcf15e9f6500181e7559\n",
      "5d3cbcf7b61d040018076b6f\n",
      "2.3561944901923475\n",
      "5d3cbcfdf8ffa90019ad2c7c\n",
      "5d3cbd03f8ffa90019ad2c7e\n",
      "5d3cbd09b61d040018076b71\n",
      "5d3cbd11f22d1200183f9f59\n",
      "5d3cbd17a06411001849a923\n",
      "5d3cbd1d5e9f6500181e755b\n",
      "2.6179938779914975\n",
      "5d3cbd229bb742001ac32dc1\n",
      "5d3cbd274610b6001873ff3a\n",
      "5d3cbd2db411ea00186e4711\n",
      "5d3cbd324610b6001873ff3c\n",
      "5d3cbd3a9bb742001ac32dc3\n",
      "5d3cbd3fb61d040018076b73\n",
      "2.8797932657906475\n",
      "5d3cbd45f8ffa90019ad2c80\n",
      "5d3cbd4afb29900018d5fb1c\n",
      "5d3cbd4f5e9f6500181e755d\n",
      "5d3cbd55fb29900018d5fb1e\n",
      "5d3cbd5dfb29900018d5fb20\n",
      "5d3cbd649bb742001ac32dc5\n",
      "Done!\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import qiskit\n",
    "\n",
    "ZI_job_IDs = []\n",
    "IZ_job_IDs = []\n",
    "XX_job_IDs = []\n",
    "YY_job_IDs = []\n",
    "\n",
    "ZI_and_IZ_job_IDs = []\n",
    "XX_and_YY_job_IDs = []\n",
    "\n",
    "theta_values = []\n",
    "\n",
    "for theta in np.arange(-np.pi, np.pi, np.pi / 12):\n",
    "    print(theta)\n",
    "    measure_hamiltonian_simple(theta, ZI_job_IDs, IZ_job_IDs, XX_job_IDs, YY_job_IDs)\n",
    "    measure_simultaneously_hamiltonian_simple(theta, ZI_and_IZ_job_IDs, XX_and_YY_job_IDs)\n",
    "    theta_values.append(theta)\n",
    "print('Done!')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# push job IDs to list for easier processing\n",
    "you will need to do this before closing the computer to make your life easier later on :)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ZI_job_IDs = \n",
      "['5d3cb9064610b6001873ff28', '5d3cb9385e9f6500181e7531', '5d3cb96fa06411001849a903', '5d3cb9a39bb742001ac32db3', '5d3cb9d9fb29900018d5fb0c', '5d3cba0cb61d040018076b5f', '5d3cba3e5e9f6500181e753b', '5d3cba6efb29900018d5fb10', '5d3cba9cf22d1200183f9f4f', '5d3cbad4f8ffa90019ad2c6a', '5d3cbb034610b6001873ff2e', '5d3cbb31f22d1200183f9f51', '5d3cbb61f22d1200183f9f53', '5d3cbb90a06411001849a913', '5d3cbbc5a06411001849a917', '5d3cbbfca06411001849a919', '5d3cbc264610b6001873ff32', '5d3cbc549bb742001ac32dbd', '5d3cbc84b411ea00186e470f', '5d3cbcb24610b6001873ff38', '5d3cbcd55e9f6500181e7555', '5d3cbcfdf8ffa90019ad2c7c', '5d3cbd229bb742001ac32dc1', '5d3cbd45f8ffa90019ad2c80']\n",
      "\n",
      "IZ_job_IDs = \n",
      "['5d3cb9106c947600181bb431', '5d3cb9415e9f6500181e7533', '5d3cb9779bb742001ac32db1', '5d3cb9ac6c947600181bb437', '5d3cb9e1b411ea00186e46ef', '5d3cba159bb742001ac32db9', '5d3cba46a06411001849a907', '5d3cba74b61d040018076b63', '5d3cbaa56c947600181bb439', '5d3cbadaf8ffa90019ad2c6c', '5d3cbb0b6c947600181bb43b', '5d3cbb38f8ffa90019ad2c70', '5d3cbb695e9f6500181e7547', '5d3cbb99b411ea00186e4701', '5d3cbbcb5e9f6500181e754b', '5d3cbc03b411ea00186e4707', '5d3cbc2e6c947600181bb443', '5d3cbc5d9bb742001ac32dbf', '5d3cbc8da06411001849a91b', '5d3cbcb7f8ffa90019ad2c78', '5d3cbcdc5e9f6500181e7557', '5d3cbd03f8ffa90019ad2c7e', '5d3cbd274610b6001873ff3a', '5d3cbd4afb29900018d5fb1c']\n",
      "\n",
      "XX_job_IDs = \n",
      "['5d3cb9185e9f6500181e752d', '5d3cb94a9bb742001ac32daf', '5d3cb97f6c947600181bb435', '5d3cb9b45e9f6500181e7537', '5d3cb9eaf22d1200183f9f49', '5d3cba1fa06411001849a905', '5d3cba4e5e9f6500181e753d', '5d3cba7bf22d1200183f9f4d', '5d3cbaaea06411001849a90b', '5d3cbae1fb29900018d5fb12', '5d3cbb13f8ffa90019ad2c6e', '5d3cbb425e9f6500181e7545', '5d3cbb71a06411001849a911', '5d3cbba35e9f6500181e7549', '5d3cbbd6f22d1200183f9f55', '5d3cbc09f8ffa90019ad2c74', '5d3cbc33fb29900018d5fb16', '5d3cbc655e9f6500181e7551', '5d3cbc97fb29900018d5fb18', '5d3cbcbcf8ffa90019ad2c7a', '5d3cbce3a06411001849a921', '5d3cbd09b61d040018076b71', '5d3cbd2db411ea00186e4711', '5d3cbd4f5e9f6500181e755d']\n",
      "\n",
      "YY_job_IDs = \n",
      "['5d3cb9235e9f6500181e752f', '5d3cb953b61d040018076b5b', '5d3cb9884610b6001873ff2a', '5d3cb9beb411ea00186e46ed', '5d3cb9f04610b6001873ff2c', '5d3cba26b411ea00186e46f1', '5d3cba55fb29900018d5fb0e', '5d3cba86b411ea00186e46f5', '5d3cbab95e9f6500181e753f', '5d3cbaeaa06411001849a90d', '5d3cbb195e9f6500181e7543', '5d3cbb4ab61d040018076b69', '5d3cbb79b411ea00186e46fd', '5d3cbbada06411001849a915', '5d3cbbdeb411ea00186e4705', '5d3cbc125e9f6500181e754d', '5d3cbc3df8ffa90019ad2c76', '5d3cbc6fb411ea00186e470d', '5d3cbc9eb61d040018076b6b', '5d3cbcc3a06411001849a91d', '5d3cbcebf22d1200183f9f57', '5d3cbd11f22d1200183f9f59', '5d3cbd324610b6001873ff3c', '5d3cbd55fb29900018d5fb1e']\n",
      "\n",
      "ZI_and_IZ_job_IDs = \n",
      "['5d3cb92b6c947600181bb433', '5d3cb95bb411ea00186e46eb', '5d3cb991b61d040018076b5d', '5d3cb9c8f22d1200183f9f47', '5d3cb9fb9bb742001ac32db7', '5d3cba305e9f6500181e7539', '5d3cba5ca06411001849a909', '5d3cba8db411ea00186e46f7', '5d3cbac2b61d040018076b65', '5d3cbaf0fb29900018d5fb14', '5d3cbb206c947600181bb43d', '5d3cbb52a06411001849a90f', '5d3cbb824610b6001873ff30', '5d3cbbb59bb742001ac32dbb', '5d3cbbe86c947600181bb441', '5d3cbc19b411ea00186e4709', '5d3cbc444610b6001873ff34', '5d3cbc784610b6001873ff36', '5d3cbca95e9f6500181e7553', '5d3cbccafb29900018d5fb1a', '5d3cbcf15e9f6500181e7559', '5d3cbd17a06411001849a923', '5d3cbd3a9bb742001ac32dc3', '5d3cbd5dfb29900018d5fb20']\n",
      "\n",
      "XX_and_YY_job_IDs = \n",
      "['5d3cb932b61d040018076b59', '5d3cb9655e9f6500181e7535', '5d3cb99bf22d1200183f9f45', '5d3cb9cf9bb742001ac32db5', '5d3cba04f22d1200183f9f4b', '5d3cba39b411ea00186e46f3', '5d3cba64b61d040018076b61', '5d3cba96b411ea00186e46f9', '5d3cbacd5e9f6500181e7541', '5d3cbaf7b411ea00186e46fb', '5d3cbb29b61d040018076b67', '5d3cbb586c947600181bb43f', '5d3cbb88b411ea00186e46ff', '5d3cbbbcb411ea00186e4703', '5d3cbbf2f8ffa90019ad2c72', '5d3cbc205e9f6500181e754f', '5d3cbc4eb411ea00186e470b', '5d3cbc7d6c947600181bb445', '5d3cbcadb61d040018076b6d', '5d3cbcd0a06411001849a91f', '5d3cbcf7b61d040018076b6f', '5d3cbd1d5e9f6500181e755b', '5d3cbd3fb61d040018076b73', '5d3cbd649bb742001ac32dc5']\n",
      "\n",
      "theta_values = \n",
      "[-3.141592653589793, -2.8797932657906435, -2.617993877991494, -2.3561944901923444, -2.094395102393195, -1.8325957145940452, -1.5707963267948957, -1.308996938995746, -1.0471975511965965, -0.785398163397447, -0.5235987755982974, -0.2617993877991478, 1.7763568394002505e-15, 0.26179938779915135, 0.5235987755983009, 0.7853981633974505, 1.0471975511966, 1.3089969389957492, 1.5707963267948992, 1.8325957145940492, 2.0943951023931984, 2.3561944901923475, 2.6179938779914975, 2.8797932657906475]\n"
     ]
    }
   ],
   "source": [
    "print('ZI_job_IDs = ')\n",
    "print(ZI_job_IDs)\n",
    "print()\n",
    "\n",
    "print('IZ_job_IDs = ')\n",
    "print(IZ_job_IDs)\n",
    "print()\n",
    "\n",
    "print('XX_job_IDs = ')\n",
    "print(XX_job_IDs)\n",
    "print()\n",
    "\n",
    "print('YY_job_IDs = ')\n",
    "print(YY_job_IDs)\n",
    "print()\n",
    "\n",
    "print('ZI_and_IZ_job_IDs = ')\n",
    "print(ZI_and_IZ_job_IDs)\n",
    "print()\n",
    "\n",
    "print('XX_and_YY_job_IDs = ')\n",
    "print(XX_and_YY_job_IDs)\n",
    "print()\n",
    "\n",
    "print('theta_values = ')\n",
    "print(theta_values)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### (Check the status of the specific job)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<JobStatus.DONE: 'job has successfully run'>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "backend.retrieve_job('5d3cbd649bb742001ac32dc5').status()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Retyping the job IDs\n",
    "just copy and paste from the print statement results in the previous block"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "ZI_job_IDs = ['5d3cb9064610b6001873ff28', '5d3cb9385e9f6500181e7531', '5d3cb96fa06411001849a903', '5d3cb9a39bb742001ac32db3', '5d3cb9d9fb29900018d5fb0c', '5d3cba0cb61d040018076b5f', '5d3cba3e5e9f6500181e753b', '5d3cba6efb29900018d5fb10', '5d3cba9cf22d1200183f9f4f', '5d3cbad4f8ffa90019ad2c6a', '5d3cbb034610b6001873ff2e', '5d3cbb31f22d1200183f9f51', '5d3cbb61f22d1200183f9f53', '5d3cbb90a06411001849a913', '5d3cbbc5a06411001849a917', '5d3cbbfca06411001849a919', '5d3cbc264610b6001873ff32', '5d3cbc549bb742001ac32dbd', '5d3cbc84b411ea00186e470f', '5d3cbcb24610b6001873ff38', '5d3cbcd55e9f6500181e7555', '5d3cbcfdf8ffa90019ad2c7c', '5d3cbd229bb742001ac32dc1', '5d3cbd45f8ffa90019ad2c80']\n",
    "IZ_job_IDs = ['5d3cb9106c947600181bb431', '5d3cb9415e9f6500181e7533', '5d3cb9779bb742001ac32db1', '5d3cb9ac6c947600181bb437', '5d3cb9e1b411ea00186e46ef', '5d3cba159bb742001ac32db9', '5d3cba46a06411001849a907', '5d3cba74b61d040018076b63', '5d3cbaa56c947600181bb439', '5d3cbadaf8ffa90019ad2c6c', '5d3cbb0b6c947600181bb43b', '5d3cbb38f8ffa90019ad2c70', '5d3cbb695e9f6500181e7547', '5d3cbb99b411ea00186e4701', '5d3cbbcb5e9f6500181e754b', '5d3cbc03b411ea00186e4707', '5d3cbc2e6c947600181bb443', '5d3cbc5d9bb742001ac32dbf', '5d3cbc8da06411001849a91b', '5d3cbcb7f8ffa90019ad2c78', '5d3cbcdc5e9f6500181e7557', '5d3cbd03f8ffa90019ad2c7e', '5d3cbd274610b6001873ff3a', '5d3cbd4afb29900018d5fb1c']\n",
    "XX_job_IDs = ['5d3cb9185e9f6500181e752d', '5d3cb94a9bb742001ac32daf', '5d3cb97f6c947600181bb435', '5d3cb9b45e9f6500181e7537', '5d3cb9eaf22d1200183f9f49', '5d3cba1fa06411001849a905', '5d3cba4e5e9f6500181e753d', '5d3cba7bf22d1200183f9f4d', '5d3cbaaea06411001849a90b', '5d3cbae1fb29900018d5fb12', '5d3cbb13f8ffa90019ad2c6e', '5d3cbb425e9f6500181e7545', '5d3cbb71a06411001849a911', '5d3cbba35e9f6500181e7549', '5d3cbbd6f22d1200183f9f55', '5d3cbc09f8ffa90019ad2c74', '5d3cbc33fb29900018d5fb16', '5d3cbc655e9f6500181e7551', '5d3cbc97fb29900018d5fb18', '5d3cbcbcf8ffa90019ad2c7a', '5d3cbce3a06411001849a921', '5d3cbd09b61d040018076b71', '5d3cbd2db411ea00186e4711', '5d3cbd4f5e9f6500181e755d']\n",
    "YY_job_IDs = ['5d3cb9235e9f6500181e752f', '5d3cb953b61d040018076b5b', '5d3cb9884610b6001873ff2a', '5d3cb9beb411ea00186e46ed', '5d3cb9f04610b6001873ff2c', '5d3cba26b411ea00186e46f1', '5d3cba55fb29900018d5fb0e', '5d3cba86b411ea00186e46f5', '5d3cbab95e9f6500181e753f', '5d3cbaeaa06411001849a90d', '5d3cbb195e9f6500181e7543', '5d3cbb4ab61d040018076b69', '5d3cbb79b411ea00186e46fd', '5d3cbbada06411001849a915', '5d3cbbdeb411ea00186e4705', '5d3cbc125e9f6500181e754d', '5d3cbc3df8ffa90019ad2c76', '5d3cbc6fb411ea00186e470d', '5d3cbc9eb61d040018076b6b', '5d3cbcc3a06411001849a91d', '5d3cbcebf22d1200183f9f57', '5d3cbd11f22d1200183f9f59', '5d3cbd324610b6001873ff3c', '5d3cbd55fb29900018d5fb1e']\n",
    "ZI_and_IZ_job_IDs = ['5d3cb92b6c947600181bb433', '5d3cb95bb411ea00186e46eb', '5d3cb991b61d040018076b5d', '5d3cb9c8f22d1200183f9f47', '5d3cb9fb9bb742001ac32db7', '5d3cba305e9f6500181e7539', '5d3cba5ca06411001849a909', '5d3cba8db411ea00186e46f7', '5d3cbac2b61d040018076b65', '5d3cbaf0fb29900018d5fb14', '5d3cbb206c947600181bb43d', '5d3cbb52a06411001849a90f', '5d3cbb824610b6001873ff30', '5d3cbbb59bb742001ac32dbb', '5d3cbbe86c947600181bb441', '5d3cbc19b411ea00186e4709', '5d3cbc444610b6001873ff34', '5d3cbc784610b6001873ff36', '5d3cbca95e9f6500181e7553', '5d3cbccafb29900018d5fb1a', '5d3cbcf15e9f6500181e7559', '5d3cbd17a06411001849a923', '5d3cbd3a9bb742001ac32dc3', '5d3cbd5dfb29900018d5fb20']\n",
    "XX_and_YY_job_IDs = ['5d3cb932b61d040018076b59', '5d3cb9655e9f6500181e7535', '5d3cb99bf22d1200183f9f45', '5d3cb9cf9bb742001ac32db5', '5d3cba04f22d1200183f9f4b', '5d3cba39b411ea00186e46f3', '5d3cba64b61d040018076b61', '5d3cba96b411ea00186e46f9', '5d3cbacd5e9f6500181e7541', '5d3cbaf7b411ea00186e46fb', '5d3cbb29b61d040018076b67', '5d3cbb586c947600181bb43f', '5d3cbb88b411ea00186e46ff', '5d3cbbbcb411ea00186e4703', '5d3cbbf2f8ffa90019ad2c72', '5d3cbc205e9f6500181e754f', '5d3cbc4eb411ea00186e470b', '5d3cbc7d6c947600181bb445', '5d3cbcadb61d040018076b6d', '5d3cbcd0a06411001849a91f', '5d3cbcf7b61d040018076b6f', '5d3cbd1d5e9f6500181e755b', '5d3cbd3fb61d040018076b73', '5d3cbd649bb742001ac32dc5']\n",
    "theta_values = [-3.141592653589793, -2.8797932657906435, -2.617993877991494, -2.3561944901923444, -2.094395102393195, -1.8325957145940452, -1.5707963267948957, -1.308996938995746, -1.0471975511965965, -0.785398163397447, -0.5235987755982974, -0.2617993877991478, 1.7763568394002505e-15, 0.26179938779915135, 0.5235987755983009, 0.7853981633974505, 1.0471975511966, 1.3089969389957492, 1.5707963267948992, 1.8325957145940492, 2.0943951023931984, 2.3561944901923475, 2.6179938779914975, 2.8797932657906475]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Retrieve the job results"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### compute the energy sums for naive measurement"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10.807200000000002\n",
      "11.607560000000001\n",
      "11.78512\n",
      "11.89976\n",
      "11.0054\n",
      "10.05568\n",
      "8.39736\n",
      "7.227200000000002\n",
      "5.69628\n",
      "3.4002000000000003\n",
      "2.2773600000000007\n",
      "0.82712\n",
      "-0.2978399999999991\n",
      "-0.8495200000000002\n",
      "-1.2616399999999992\n",
      "-0.7684399999999993\n",
      "-0.17743999999999915\n",
      "0.6048800000000005\n",
      "1.8539600000000012\n",
      "3.68084\n",
      "5.359360000000001\n",
      "6.9428399999999995\n",
      "8.50416\n",
      "9.897359999999999\n"
     ]
    }
   ],
   "source": [
    "#backend = IBMQ.get_backend('')\n",
    "shots1 = 1000\n",
    "final_result_naive = []\n",
    "for i in range (len(theta_values)):\n",
    "    \n",
    "    zi_counts = backend.retrieve_job(ZI_job_IDs[i]).result().get_counts()\n",
    "    zi_contribution = (zi_counts.get('00', 0) + zi_counts.get('10', 0) \n",
    "                       - zi_counts.get('11', 0) - zi_counts.get('01', 0)) / shots1\n",
    "    #print(zi_counts)\n",
    "    #print(zi_counts.get('10', 0))\n",
    "    #print(zi_contribution)\n",
    "    \n",
    "    iz_counts = backend.retrieve_job(IZ_job_IDs[i]).result().get_counts()\n",
    "    iz_contribution = (iz_counts.get('00', 0) + iz_counts.get('01', 0) \n",
    "                       - iz_counts.get('10', 0) - iz_counts.get('11', 0)) / shots1\n",
    "    \n",
    "    xx_counts = backend.retrieve_job(XX_job_IDs[i]).result().get_counts()\n",
    "    xx_contribution = (xx_counts.get('00', 0) + xx_counts.get('11', 0) \n",
    "                       - xx_counts.get('01', 0) - xx_counts.get('10', 0)) / shots1\n",
    "    \n",
    "    yy_counts = backend.retrieve_job(YY_job_IDs[i]).result().get_counts()\n",
    "    yy_contribution = (yy_counts.get('00', 0) + yy_counts.get('11', 0) \n",
    "                       - yy_counts.get('01', 0) - yy_counts.get('10', 0)) / shots1\n",
    "    \n",
    "    total = 5.9 + .22 * zi_contribution - 6.1 * iz_contribution - 2.14 * xx_contribution - 2.14 * yy_contribution\n",
    "    final_result_naive.append(total)\n",
    "    print(total)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "final_result_naive = [10.807200000000002,11.607560000000001,11.78512,11.89976,11.0054,10.05568,8.39736,7.227200000000002,5.69628,3.4002000000000003,2.2773600000000007,0.82712,-0.2978399999999991,-0.8495200000000002,-1.2616399999999992,-0.7684399999999993,-0.17743999999999915,0.6048800000000005,1.8539600000000012,3.68084,5.359360000000001,6.9428399999999995,8.50416,9.897359999999999]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### compute the energy sums for simultaneous measurement"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10.7013296\n",
      "11.393508\n",
      "11.37970392\n",
      "11.60096976\n",
      "10.944376659999998\n",
      "9.720569440000002\n",
      "8.432333900000001\n",
      "7.174680800000001\n",
      "5.3512792\n",
      "3.486390800000001\n",
      "2.154184780000001\n",
      "0.8099097000000004\n",
      "-0.2586061799999995\n",
      "-0.8986360000000001\n",
      "-1.1858053199999992\n",
      "-0.9109557399999995\n",
      "-0.3971209999999996\n",
      "0.31902728000000025\n",
      "2.0504440200000005\n",
      "3.097132\n",
      "5.620603280000001\n",
      "6.9206620999999995\n",
      "8.4203664\n",
      "10.00763702\n"
     ]
    }
   ],
   "source": [
    "#backend = IBMQ.get_backend('ibmq_qasm_simulator')\n",
    "shots2 = 2000\n",
    "\n",
    "final_result_simultaneous = []\n",
    "for i in range (len(theta_values)):\n",
    "    zi_and_iz_counts = backend.retrieve_job(ZI_and_IZ_job_IDs[i]).result().get_counts()\n",
    "    zi_contribution = (zi_and_iz_counts.get('00', 0) + zi_and_iz_counts.get('10', 0) \n",
    "                       - zi_and_iz_counts.get('11', 0) - zi_and_iz_counts.get('01', 0)) / shots2\n",
    "    iz_contribution = (zi_and_iz_counts.get('00', 0) + zi_and_iz_counts.get('01', 0) \n",
    "                       - zi_and_iz_counts.get('10', 0) - zi_and_iz_counts.get('11', 0)) / shots2\n",
    "    #print(zi_and_iz_counts)\n",
    "    xx_and_yy_counts = backend.retrieve_job(XX_and_YY_job_IDs[i]).result().get_counts()\n",
    "    xx_contribution = (xx_and_yy_counts.get('00', 0) + xx_and_yy_counts.get('10', 0) \n",
    "                       - xx_and_yy_counts.get('11', 0) - xx_and_yy_counts.get('01', 0)) / shots2\n",
    "    zz_contribution = (xx_and_yy_counts.get('00', 0) + xx_and_yy_counts.get('01', 0) \n",
    "                       - xx_and_yy_counts.get('10', 0) - xx_and_yy_counts.get('11', 0)) / shots2\n",
    "    yy_contribution = -xx_contribution * zz_contribution\n",
    "    total = 5.9 + .22 * zi_contribution - 6.1 * iz_contribution - 2.14 * xx_contribution - 2.14 * yy_contribution\n",
    "    final_result_simultaneous.append(total)\n",
    "    print(total)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "final_result_simultaneous = [10.7013296,11.393508,11.37970392,11.60096976,10.944376659999998,9.720569440000002,8.432333900000001,7.174680800000001,5.3512792,3.486390800000001,2.154184780000001,0.8099097000000004,-0.2586061799999995,-0.8986360000000001,-1.1858053199999992,-0.9109557399999995,-0.3971209999999996,0.31902728000000025,2.0504440200000005,3.097132,5.620603280000001,6.9206620999999995,8.4203664,10.00763702]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "values_theory = [12.191751999999997, 13.15524, 13.462224, 13.381992, 12.837567999999997, 11.637923999999998, 10.217920000000001, 8.380472000000001, 6.38668, 4.4392, 2.5525520000000013, 0.8814480000000007, -0.42213999999999907, -1.3090319999999995, -1.7176839999999993, -1.5886079999999994, -0.9050319999999998, 0.2661680000000004, 1.5365760000000002, 3.4022159999999992, 5.413296000000001, 7.372232, 9.278692, 10.918935999999999]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Superimpose naive vs. simultaneous results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "SMALL_SIZE = 8\n",
    "MEDIUM_SIZE = 10\n",
    "BIGGER_SIZE = 12\n",
    "\n",
    "plt.rc('font', size=12)          # controls default text sizes\n",
    "plt.rc('axes', titlesize=15)     # fontsize of the axes title\n",
    "plt.rc('axes', labelsize=14)    # fontsize of the x and y labels\n",
    "plt.rc('xtick', labelsize=14)    # fontsize of the tick labels\n",
    "plt.rc('ytick', labelsize=14)    # fontsize of the tick labels\n",
    "plt.rc('legend', fontsize=14)    # legend fontsize\n",
    "plt.rc('figure', titlesize=BIGGER_SIZE)  # fontsize of the figure title"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjIAAAG5CAYAAACUU97fAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAMTQAADE0B0s6tTgAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi40LCBodHRwOi8vbWF0cGxvdGxpYi5vcmcv7US4rQAAIABJREFUeJzs3XdYU9f/B/B3GCHIFBcKylBxodZVVxVtVdpqW6tUba17YIfairPVureorbVq3asuxFFH1dbR+tWiIloXKo6ioIgi2xBIzu8PfqRGghII3ATer+fJo9x7c/MmCTefnHvOuTIhhAARERGRGbKQOgARERFRQbGQISIiIrPFQoaIiIjMFgsZIiIiMlssZIiIiMhssZAhIiIis8VChoiIiMwWCxkiMiqZTIYpU6ZIHUPHlClTIJPJpI5BRnL37l3IZDKsW7eu0Pvq378/7O3tCx+KJMNCppRYt24dZDKZ9qZQKFClShX4+/vjhx9+QEpKSrHk+Omnn4xy8DFHx48fh0wmQ0hIiN715nRAPXDggMkVK+np6ZgyZQqOHz8udRSDdezYETKZDF9++aXe9atXr0adOnWgUChQs2ZNLFmyRO92MTEx6NGjB5ydneHo6IgPPvgAt2/fLtQ+X3Tq1ClMmTIFiYmJ+fvl9Cjpx4FZs2Zh9+7dUscoNVjIlDLTpk3Dxo0bsWzZMgwfPhwA8NVXX6F+/fr4559/ivzxS/oBrLQ4cOAApk6dqnfds2fPMHHixGJOlF3ITJ06VW8hM3HiRDx79qzYM+VHaGgoTp8+nef6FStWYPDgwahXrx6WLFmCli1bYsSIEZg7d67OdqmpqWjfvj1OnDiBb775BlOnTkVERAT8/Pzw5MmTAu1Tn1OnTmHq1KksZF6ChUzxspI6ABWvd955B02bNtX+PGHCBBw9ehRdunTB+++/j2vXrsHW1lbChIbLysqCRqOBXC6XOoqO+Ph4ZGVloXLlygXeR2RkJKpXrw5ra2sjJitaCoVC6gi5WFlZwcrK9A53SqUSQUFBGDduHL777rtc6589e4Zvv/0WnTt31rbkDRkyBBqNBtOnT8fQoUNRtmxZANnFwc2bN3HmzBk0a9YMQPbfu6+vL4KDgzFr1iyD90lkFgSVCmvXrhUAxNmzZ/WunzVrlgAgfv75Z53l165dE927dxdly5YVNjY2okmTJmLPnj0620yePFnoeyvlPOadO3eEEEJ4eHgIADo3Pz8/7fZPnz4VI0eOFO7u7kIul4vq1auLOXPmCLVard3mzp07AoCYP3++WLRokfD29hYWFhYiIiJCCCFEXFycGDhwoKhYsaKwsbERDRo0EOvWrdPJ9fw+VqxYIby9vYVcLhdNmzYVZ86cyfdzqo9arRYHDx4UAQEBQi6Xi127dmnXHTt2TAAQO3bs0Hvffv36CTs7u1zLKlSoIIKCgsTVq1cLlU2I/L2eKpVKTJkyRdSoUUPY2NgIFxcX0bp1a3H48GFtphdfx+dffwBi8uTJ2p9z3h/Xr18XvXv3Fo6OjqJ8+fJi4sSJQqPRiOjoaPH+++8LBwcHUalSJbFgwQKdPBkZGWLSpEmicePGwtHRUZQpU0a88cYb4ujRo9ptcl7TF285OfS9RzMzM8W0adO0r7+Hh4eYMGGCUCqVOtt5eHiIzp07i7/++ks0a9ZM2NjYCC8vL7F+/foCvw45pk6dKqpVqybS09MFAPHFF1/orN+/f78AIPbv36+z/NSpUwKA2Lhxo3ZZs2bNRLNmzXI9RqdOnUT16tULtM8X5TyPL95y/sbz85y+7Djw5MkTERQUJHx9fYWdnZ1wcHAQb7/9trhw4YJOjpzXe+3atXlmFeLV72Uh/vu7u3//vvjggw+EnZ2dKF++vAgKChJZWVk6+0tNTRWjRo3SHqN8fHzE/PnzhUaj0W6j7/np16+fEEKI5ORkMXLkSOHh4SHkcrmoUKGC6NChgwgPD3/p70EvZ3pfUUgSffr0wTfffIPDhw9jyJAhAIArV66gdevWcHNzw/jx42FnZ4ft27eja9eu2LlzJz788EODHmPx4sUYPnw47O3t8e233wIAKlWqBCD7tICfnx9iYmIQGBiIatWq4dSpU5gwYQIePHiAxYsX6+xr7dq1UCqVGDp0KGxsbODi4oJnz56hXbt2iIqKwpdffgkvLy/s2LED/fv3R2JiIkaOHKmzj19++QUpKSkIDAyETCbDvHnz0K1bN9y+fdvgFpC7d+9izZo1WLduHe7du4eqVati7NixaN26da5tU1JS8Pjx41zLMzIyci0bPnw4NBoNli1bhuDgYLRq1QqDBg1Cjx49DO5Pk9/Xc8qUKZg9ezYGDx6M119/HcnJyTh37hzOnz+Pjh07IjAwELGxsThy5Ag2btyY78fv2bMn6tSpgzlz5mD//v2YMWMGXFxcsGLFCrz55puYO3cuNm/ejNGjR6NZs2Zo27YtACA5ORmrVq3Cxx9/jCFDhiAlJQWrV6+Gv78/zpw5g9deew0VKlTAsmXL8Nlnn+HDDz9Et27dAAANGjTIM8/gwYOxfv16BAQEICgoCGFhYZg9ezauXbuGXbt26WwbFRWFgIAADBo0CP369cOaNWvQv39/NGnSBPXq1TPodcgRHR2NOXPmYM2aNXm2gkZERACATisqADRp0gQWFhaIiIjAp59+Co1Gg3/++QcDBw7MtY/XX38dhw8fRkpKChwcHPK9T326deuGGzduYMuWLVi0aBHKly8PAKhQoQKA/D2nLzsO3L59G7t378ZHH30ELy8vxMXFYcWKFfDz88PVq1dRpUqVVz+xz3nVezmHWq2Gv78/mjdvjgULFuD3339HcHAwqlevjs8++wwAIITA+++/j2PHjmHQoEF47bXXcOjQIYwZMwYxMTFYtGgRAGDjxo3axxs6dCgAoHr16gCAYcOGISQkBF9++SXq1q2LJ0+e4OTJk7h27RoaN25s0O9Gz5G6kqLi8aoWGSGEcHJyEo0aNdL+/NZbb4n69evrfJvSaDSiVatWombNmtpl+W2REUKIevXq6bTC5Jg+fbqws7MTN27c0Fk+fvx4YWlpKaKjo4UQ/30Tc3R0FI8ePdLZdvHixQKA2LRpk3aZSqUSLVu2FPb29iI5OVlnH+XKlRMJCQnabffs2SMAiF9//TXP5+h5SqVSbNmyRXTo0EHIZDJhY2MjevbsKQ4dOqTTipQjp0XmZbcXW2RyJCUliRUrVojmzZsLAMLe3l4MGjRInDp1Kl9Zhcj/69mwYUPRuXPnl+7riy++0PuaC5F3i8zQoUO1y7KysoS7u7uQyWRizpw52uVPnz4Vtra22m+wOdtmZGToPMbTp09FpUqVxMCBA7XL4uPjcz32ixlyXLhwQQAQgwcP1tlu9OjRAoBOa09OC8Kff/6pXfbo0SNhY2MjgoKC9D4H+REQECBatWql/Rl6WmS++OILYWlpqff+FSpUEL169RJC/Pe7T5s2Ldd2S5cuFQBEZGSkQfvMy/z583P9XQth2HOa13FAqVTm+tu5c+eOsLGx0fnd8tsik5/3ck4L44vPXaNGjUSTJk20P+/evVsAEDNmzNDZLiAgQMhkMhEVFaVdZmdnp/MezuHk5JTrNabCY2df0rK3t9eOXkpISMDRo0fRo0cPbQvC48eP8eTJE/j7++PmzZuIiYkx2mPv2LEDbdq0QdmyZbWP9fjxY3To0AFqtRp//vmnzvbdu3fXfgvMceDAAbi6uuLjjz/WLrO2tsaIESOQmpqKEydO6Gzfs2dPnb4Abdq0AYA8R3nkSEtLw8iRI1GlShV8/PHHePr0KZYsWYIHDx5g69at6NSpEyws8v7T+u6773DkyJFct06dOuV5H0dHRwwdOhR///03rl69imHDhmHfvn1o1aoV6tWrh1WrVr00syGvp7OzM65cuYKbN2++dJ+GGjx4sPb/lpaWaNq0KYQQGDRokHa5s7MzatWqpfMaWFpaavs/aTQaJCQkICsrC02bNsX58+cLlOXAgQMAgFGjRuksDwoKAgDs379fZ3ndunW17w8guwXixZyGOHbsGHbu3JmrpfFFz549y7Pvl0Kh0HZgzvnXxsZG73bPb5PffRrK0OdUHxsbG+3fjlqtxpMnT2Bvb49atWoV6LU25L08bNgwnZ/btGmj8/oeOHAAlpaWGDFihM52QUFBEELg4MGD+coTFhaG2NjYfP4GlB88tURaqampqFixIoDspnQhBCZNmoRJkybp3f7Ro0dwc3MzymPfvHkT//zzT67i5PnHep6Xl1eubf7991/UrFkzVxFRp04d7frnVatWTefnnKLm6dOnL80aHx+PH374AQAwevRoTJ06FWXKlHnpfZ5Xv359dOjQIdfyTZs25ev+derUwfz58zFs2DD06dMHp0+fxo8//qhTKLzIkNdz2rRp+OCDD+Dj4wNfX1+8/fbb6NOnz0tP0+THi8+3k5MTFAqF9vTE88tfHGWzfv16BAcHIzIyEpmZmdrl+t4H+fHvv//CwsICNWrU0Fnu6uoKZ2fnV75XgOz3y6veK/pkZWVhxIgR6NOnj7ZTbl5sbW2hUqn0rlMqldpTUjn/6js9qVQqdbbJ7z4NZehzqo9Go8H333+Pn376CXfu3IFardauK1eunMGZ8vteVigUuY49L76+//77L6pUqQIHBwed7fI6vugzb9489OvXD1WrVkWTJk3w7rvvom/fvvD29jb4d6P/sJAhAMD9+/eRlJSkPQhpNBoA2R/U/v7+eu+Ts21eE409fxB6FY1Gg44dO2Ls2LF61/v4+Oj8bIyRVZaWlnqXCyFeej93d3esW7cOq1evxoIFC7BixQr07NkTAwYMQKtWrQqd62WUSiVCQ0Oxdu1a/PHHH1AoFPj000+15/HzYsjr2bZtW9y6dQt79uzB4cOHsWrVKixatAjLly9/abH0Kvqe7/y8Bps2bUL//v3RtWtXjBkzBhUrVoSlpSVmz56NW7duFTgPkPd7tyA582vDhg24fv06VqxYgbt37+qsS0lJwd27d1GxYkWUKVMGlStXhlqtxqNHj7RfMgBApVLhyZMn2j4jLi4usLGxwYMHD3I9Xs6ynG3zu8+CKszEg7NmzcKkSZMwcOBATJ8+HS4uLrCwsMBXX32lfQ8bIr/v5bxeX2Pr0aMH2rRpg127duHw4cOYP38+5s6di9DQULzzzjvFkqEkYiFDAKDttJnzIZfzDcHa2lpv68HzcloyEhMT4ezsrF2u7xtKXge56tWrIzU19ZWP9TIeHh74559/oNFodFplIiMjteuNwcrKCv369UO/fv1w48YNrFq1Chs2bMCqVavg4+ODAQMGoG/fvoX+QHjemTNnsHbtWmzZsgVJSUlo1KgRfvzxR3zyySc6z3leDHk9gewPxgEDBmDAgAFITU1F27ZtMWXKFO3BvzhnyQ0JCYG3tzdCQ0N1Hnfy5Mk62xmSycPDAxqNBjdv3tR+owaAuLg4JCYmGu29ok90dDQyMzP1dgTfsGEDNmzYgF27dqFr16547bXXAADnzp3Du+++q93u3Llz0Gg02vUWFhaoX78+zp07l2ufYWFh8Pb21rYk5HefecnreTbkOc1rHyEhIWjfvj1Wr16tszwxMTFXy11+veq9nF8eHh74/ffftZ2mc+g7vrzsvVi5cmV8/vnn+Pzzz/Ho0SM0btwYM2fOZCFTCOwjQzh69CimT58OLy8v9O7dGwBQsWJFtGvXDitWrND7LS8+Pl77/5we+c/3Y0lLS8P69etz3c/Ozk7vRFo9evTA6dOncejQoVzrEhMTkZWV9crf491338XDhw+xbds27bKsrCwsWbIE9vb28PPze+U+DOXj44N58+bh/v37CA0NRY0aNTBx4kRUq1YN7777bqH7mezcuRO+vr5o3rw5tm7dit69e+P8+fM4f/48Pv/883wVMYBhr+eLp3Xs7e1Ro0YNndMWdnZ2AFCoSdHyK+fb8vOtH2FhYbkmkcs5vZefTDkf4C/2UVm4cCEAoHPnzgUP/Aq9evXCrl27ct1ycu3atQvNmzcHALz55ptwcXHBsmXLdPaxbNkylClTRidnQEAAzp49q1PMXL9+HUePHsVHH32kXWbIPvXJ67U35DnN6zhgaWmZq5Vrx44dBe6Pl5/3cn69++67UKvV+PHHH3WWL1q0CDKZTKcQ0ff7qdVqJCUl6SyrWLEiqlSpUqA89B+2yJQyBw8eRGRkJLKyshAXF4ejR4/iyJEj8PDwwN69e3UmM1u6dCneeOMN1K9fH0OGDIG3tzfi4uJw+vRp3L9/HxcvXgQAdOrUCdWqVcOgQYMwZswYWFpaYs2aNahQoQKio6N1Hr9JkyZYtmwZZsyYgRo1aqBixYp48803MWbMGOzduxddunTRDmtNS0vDpUuXEBISgrt3777yG9nQoUOxYsUK9O/fH+Hh4fD09ERISAj+97//YfHixbnObRuTlZUVPvzwQ3z44YeIiYnB2rVrsWbNGly5cgU1a9Ys8H7379+P8uXLY8OGDQgICCjUKbX8vp5169ZFu3bt0KRJE7i4uODcuXPaIaM5mjRpAgAYMWIE/P39YWlpiV69ehU428t06dIFoaGh+PDDD9G5c2fcuXMHy5cvR926dZGamqrdztbWFnXr1sW2bdvg4+MDFxcX+Pr6wtfXN9c+GzZsiH79+uHnn39GYmIi/Pz8cObMGaxfvx5du3ZF+/btC5TV09MTAHKdMnpe7dq1Ubt2bb3rvLy80LVrV53fafr06fjiiy/w0Ucfwd/fH3/99Rc2bdqEmTNnwsXFRbvt559/jpUrV6Jz584YPXo0rK2tsXDhQlSqVEnb4dbQfeqT89p/++236NWrF6ytrfHee+8Z9JzmdRzo0qULpk2bpj1Ne+nSJWzevLnAfUjy817Or/feew/t27fHt99+i7t376Jhw4Y4fPgw9uzZg6+++kr7hS7n9/v999+xcOFCVKlSBV5eXqhVqxbc3d0REBCAhg0bwt7eHr///jvOnj2L4ODgAv1+9P8kGy9FxSpnKHTOTS6XC1dXV9GxY0fx/fffa4cmv+jWrVuib9++wtXVVVhbWws3NzfRpUsXERISorNdeHi4aN68uZDL5aJatWpi4cKFeodfP3z4UHTu3Fk4ODjkmhAvJSVFTJgwQdSoUUPI5XJRvnx50apVK7FgwQKhUqmEELqT2ekTFxcnBgwYIMqXLy/kcrmoX79+riGaL9sH8hi+WxAajUakpaVpfy7IhHipqalGyZIjP6/njBkzxOuvvy6cnZ2Fra2tqF27tpg5c6b2NRAie0j08OHDRYUKFYRMJsvXhHjx8fGv/H2FEMLPz0/Uq1dP+7NGoxGzZs0SHh4ewsbGRjRq1Ejs27dP9OvXT3h4eOjc99SpU6JJkyZCLpfna0K8qVOnCi8vL2FtbS2qVq360gnx9OV8cQhx+fLlRYsWLXJtmx/QM/w6x88//yxq1aqlnShy0aJFOpOw5bh3754ICAgQjo6Owt7eXnTp0kXcvHmzUPvUZ/r06cLNzU1YWFjkmhAvP89pXscBpVIpgoKCROXKlYWtra1o3bq1OH36dK7nOr/Dr/PzXs7rfajvPZOSkiK+/vprUaVKFWFtbS1q1qyZa0I8IYSIjIwUbdu2Fba2ttoJ8TIyMsSYMWNEw4YNhYODg7CzsxMNGzYUP/300yuebXoVmRAF6K1GREQ6rl69inr16mHfvn1FemqKiHSxjwwRkREcO3YMLVu2ZBFDVMzYIkNERERmiy0yREREZLZYyBAREZHZYiFDREREZqtEzyNjY2OT57V7iIiIyDTFx8fne6LAEl3IVKhQAffv35c6BhERERnA3d0939vy1BIRERGZLRYyREREZLZYyBAREZHZYiFDREREZouFDBEREZktFjJERERktljIEBERkdliIUNERERmi4UMERERmS0WMkRERGS2WMgQERGR2WIhQ0RERGaLhQwRERGZLRYyREREZLaspA5AhZecnIy9e/di27ZtOH78OGbMmIGRI0cCAMaMGQMhBCpVqqRzq1mzJuzs7CROTkREVDgsZMzYkSNH8NNPP+HgwYPIyMiApaUlWrZsCW9vb+02K1euRFJSUq77Hj16FO3bt0dCQgLatGmjLXAqVqyo/bd3796wtbUtzl+JiIjIICxkzMizZ89w9uxZtG3bFgAQERGBvXv3ws/PDz179kS3bt1QoUIFnfvExMQgLi4Ojx49QlxcnPZWq1YtAEBKSgrUajUiIiKQmJioc9/evXsDyG7xsbS0ZAsOERGZHJkQQkgdoqi4u7vj/v37UscolIyMDBw6dAjbtm3D3r178ezZMzx48AAVKlRAQkICVCoVXF1djfZY8fHxiIuLQ3x8PN5++20AwBdffIFff/0VixYtQrdu3SCTyYzyeERERPoY8vnNFhkTpVarMXjwYOzatUt7aqh58+bo2bMnrK2tAQAuLi5GfUwbGxu4u7vD3d1dZ3m9evWwefNmBAQEwN/fH0uWLEHNmjWN+thEREQFwRYZE5GVlYUTJ07A0tIS7dq1AwC0bt0aSqUSPXv2RI8ePeDp6SlZvri4OIwbNw7r16+HXC7HmDFjMGnSJNjY2EiWiYiISiZDPr9ZyEjs/PnzWLVqFXbu3IlHjx6hbdu2OHHiBAAgLS3N5Pql/PXXX/jiiy9gbW2NM2fOwNLSUupIRERUwvDUkpk4ePAg3n//fWRlZaF27dr47LPP0LNnT+16UytiAKBNmzY4f/484uLitEXM3LlzERAQgOrVq0ucjoiIShu2yEgkNTVVe6ro119/RYsWLcyyE+3Fixfx2muvwcbGBuPHj8e4ceM4ZJuIiArFkM9vzuwrEXt7e+zevRsHDx5Ey5YtzbKIAYCGDRvi+PHjqFGjBqZOnYp69eph3759UsciIqJSgoVMMYuMjMTt27cBAG+88QaaNWsmcaLC8/PzQ0REBIKDgxEfH4/33nsPM2bMkDoWERGVAixkitHdu3fRoUMHtG/fHkqlUuo4RmVtbY1Ro0bh+vXr+PTTT9GrVy8AgEajQUZGhsTpiIiopGIhU0wePnyIjh07IjY2FnPmzIFCoZA6UpGoUqUKNm7ciBo1agAA1q1bB19fX/z2228SJyMiopKIhUwxSEhIQMeOHREVFYVly5bh448/ljpSscnIyMCDBw/wzjvvoFu3bnj48KHUkYiIqARhIVPEUlNT8e677+Ly5cuYO3cuAgMDpY5UrD777DNcu3YNAQEB2LVrF7p27QqVSiV1LCIiKiFYyBQxuVyOqlWrYsKECRg7dqzUcSRRtWpV7NixA2PGjEFYWBgmTJggdSQiIiohOCFeEVGr1bCwsIBcLsfWrVthYcGacebMmbh9+za6dOkidRQiIiohWMgUAY1GgwEDBqBixYqYP38+p/H/f9bW1ggJCZE6BhERlSBsJjAyIQRGjhyJjRs34vr161Cr1VJHMknnzp1Dz5492V+GiIgKhYWMkX333Xf48ccf0a5dO2zfvh1WVmz00mf37t3Yvn17qe03RERExsFCxoiCg4MxY8YMNGvWDHv37uU1h15iypQpaNOmDb7//nuEhoZKHYeIiMwULxppJHFxcahZsyaqVq2KP//8E+XKlSuWxzVnMTExaNSoEVQqFc6fPw9vb2+pIxERkQngRSMlUKlSJfzxxx84cuQIi5h8cnNzw6ZNm5CcnIwePXrwUgZERGQwduAopCNHjqBatWqoVatWibgAZHHr1KkTJk6ciIyMDA5RJyIig/HUUiH89ddf8Pf3h6enJy5dusRh1gUkhIBMJpM6BhERmQieWioG58+fR5cuXWBlZYUNGzawiCmEnCImNTUVgYGBiIqKkjgRERGZCxYyBRAZGQl/f3+oVCr8+uuvaNq0qdSRSoTw8HCsXLkSH330EZRKpdRxiIjIDLCQMVBsbCw6duyIxMREhISEwM/PT+pIJYafnx8mTZqECxcu4Ouvv5Y6DhERmQEWMgaqUKEC3nrrLWzYsAGdO3eWOk6J89133+HNN9/E8uXLsWXLFqnjEBGRiWNnXzI5Dx8+xGuvvYa0tDSEh4fDx8dH6khERFSM2NmXzJqrqyu2bNmCOnXq8BIPRET0UmyRIZOl0Wg4twwRUSnEFhkyiqiEKLRY1QJRCdIMh84pYrZu3Yrt27dLkoGIiEwbCxnK0+RjkxEWE4bJxyZLliE1NRWjRo3CwIEDERkZKVkOIiIyTSxkShBjtqBEJURh25VtAIBtV7ZJ1ipjb2+PLVu24NmzZ/joo4+Qnp4uSQ4iIjJNLGRKEGO2oEw+NhkWsuy3h4XMQtJWGT8/P0yfPh2XL1/GiBEjJMtBRESmh4VMCWHMFpScfWVqMgEAmZpMSVtlAGD8+PHw9/fH6tWrsXHjRslyEBGRaWEhU0IYswVl4qEZkGU4AUoH7U2W4YSJh2YYK67BLCwssHHjRvj4+HAkExERaXH4tcSiEqLwaein2NRtE2q41CjwPmr/WBtqodYus5RZIvLLSIP3qVQCduUSoUl3zrXOokwi0p44Q6EoUEyjyMrK4twyREQlHIdfmxFj9Gt5vjUmR0FbZVQq6C1igOzlKlWBIhpNThHz77//Ys6cOdKGISIiybGQkZCx+rWEPwjX9mfJkanJRPiD8EJnNFXffPMNJkyYgF27dkkdhYiIJMRTSxLqvbM3dlzdgUxNJqwtrPFR3Y+wuftmg/ejzFJCpc7dVCK3lENhZdh5oORkwMkp7/VJSYCjo6EJje/hw4eoU6cOypQpg6tXr8LpZaGJiMis8NSSGbgSewtbww8gM10BKB2Qma7A1vADuBJ7y/CdZSmADMfctywJO7MUMVdXV8yfPx+xsbGYMGGC1HGIiEgibJGRgFIJOFVIgSrVIdc6uX0KkuId8t2hVqkE3NyAhITc61xcgJgYGNQ511xaZABACIH27dvjxIkTOHnyJFq3bi11JCIiMgK2yJg4lQp6ixgge7khHWpVKv1FDJC93NDOuXJ5dgGkj4tL9npTIZPJsGLFCtjY2CA0NFTqOEREJAGOYyUdCkV2K46+AkguN6x1pzjUqlUL//zzD3x8fKSOQkREEmAhQ7koFKZXsLxMThGjVqvx9OlTlC/xUAxIAAAgAElEQVRfXuJERERUXFjIUImgUqng5+cHKysrnDhxgrP/EhGVEjzaU4kgl8vRtGlTnDx5EitXrpQ6DhERFRMWMhIwZodac+qcW9RmzZoFd3d3jB07FrGxsVLHISKiYsBCRgI5HWqTknLfDB0ubcx9mTsHBwcsXboUycnJGD58uNRxiIioGLCQkYhCkT0fy4u3ghQextxXUVAqs+enibh7C02XvImIu7eQnJy93Njef/99BAQEIDQ0FHv27DH+AxARkUlhZ18qUroT9lUHcBSNR2SvK8iEffmxZMkSVKpUCW3btjXujomIyORwZl8qUuY0UzAREZkGzuxLBECpVOK7777DqVOnpI5CRERFhIWMgaISotBiVQtEJURJHYVeITo6GnPnzsWQIUOQkZEhdRwiohLjxo0bMJUTOixkDDT52GSExYRh8rHJUkehV/Dx8cHEiRNx9epVzJ07V+o4REQlwqNHj9C0aVP06dNH6igAWMjkm1KZPepma/gBQOmAreEHEHH3VpGMvCHjGTduHOrVq4eZM2fi2rVrUschIjJ7v/32G1JSUtC1a1epowBgZ9980R15o6uoRt6UFNnPnUBCgizXOhcXgZgYWZE/d6dPn0br1q3xxhtv4Pjx47x8ARFRIV25cgV169aFTJb72G4M7OxrZCqV/iIGyF6u70rRlC17wj5ZHhP2FX0RAwAtW7bE559/jpiYGM74S0RUCGq1GgBQr169IitiDMVChoqcKUzYN2fOHFy6dAnu7u7F96BERCXIyZMnUbduXZw+fVrqKDpYyFCpYG9vjzJlygAAIiMjJU5DRGRehBAYM2YMbt++jfLly0sdRwcLGSpV1q5di7p162L37t1SRyEiMhshISH4+++/MWzYMNSsWVPqODrY2TcfODttyfHgwQPUqVMH9vb2uHr1Khz5whERvZRKpULdunURHx+PqKgoVKhQocgfk519jUwuzx6dpI+LS/Z6Mg+VK1fG/PnzERMTgwkTJkgdh4jI5C1fvhy3bt3C+PHji6WIMRQLmXzIHnmTe9RN9sgbDr02N4MGDUKbNm2wbNkyXr6AiOgVMjIy4OPjg6+++krqKHrx1BKVSpGRkWjYsCFq1aqFCxcucG4ZIqKXyMzMhLW1dbE9niGf31ZFnIXIJNWuXRvLly9HgwYNWMQQEenx6NEjyOVyODs7F2sRYygewanUGjBgAJo0aSJ1DCIikxQUFITq1asjJiZG6igvxUKGSr39+/ejd+/e0Gg0UkchIjIJ58+fx6ZNm9CsWTO4ublJHeelJClkoqKiMGzYMDRu3BjW1tbw9PTUu91vv/2Gxo0bQ6FQwMvLC4sWLSreoFQqHDhwAL/88gtWrVoldRQiIsnlTH4nk8kwb948qeO8kiSFzJUrV7Bv3z54enrC19dX7zZhYWF4//330aBBAxw8eBCBgYEYM2YMlixZUsxpqaSbPXs2KleujO+++w7p6elSxyEiktRvv/2Go0ePon///mjQoIHUcV5JklFLGo1G28Fy2LBh+O2333D37l2dbd599108evQIZ8+e1V6YasSIEdi8eTMePnyYr45HHLVUckUlROHT0E+xqdsm1HCpUej9LVmyBCNGjMDixYsxcuRIIyQkIjI/arUar732Gm7duoUbN27kuj6dUqn/QslyuXGnIjH5CfFeNUokIyMDf/zxB3r27Klzdc3evXsjISGBc38QJh+bjLCYMEw+Ntko+xs8eDBcXV0xb948KJVKo+yTiMgcDR8+HNOnT9dbxLi5Zc90/+LNzS17vRRMsrPvrVu3oFKpUKdOHZ3ldevWBQBcu3ZNilhkIqISorDtyjYAwLYr2xCVEFXofdra2mLs2LFISEjAuXPnCr0/IiJzZGlpiaFDhyIoKCjXOpUKSEjQf7+EBP0tNcXBJAuZp0+fAgCcnZ11ljs4OMDS0hIJeT2TVCpMPjYZFrLst66FzMJorTKBgYG4c+cO3njjDaPsj4jInOzatQu3b9+WOobBTLKQKaiFCxfC3d1de0tNTZU6EhlZTmtMpiYTAJCpyTRaq0yZMmXg6uoKILvXPhFRaREXF4e+ffuia9euZnf8M8lCpmzZsgCAxMREneUpKSlQq9VwyeMKjqNGjcL9+/e1N3t7+yLPSsXr+daYHMZslQGApUuX4vXXX0dmZqbR9klEZMqmTJmC1NRUTJs2TadvqjkwyUKmevXqkMvlufrCXL16FQBy9Z2h0uNs9CVkpisApYP2lpmuwNnoS0Z7jKSkJJw7dw4bN2402j6JiEzVtWvXsHLlSrzxxhv44IMPpI5jMJMsZGxsbPDmm29i+/btOk1cW7ZsQdmyZdGyZUsJ05FUlErgyYyLwJzkXLcnMy4arcf8l19+CWdnZ8yaNQtZWVnG2SkRkYkaN24c1Go1FixY8NLWGLkccCqr1rvOqawacnlRJXw5SS4amZ6ejgMHDgAAbt++jfT0dISEhAAAmjVrBg8PD3z33Xdo27YtBg0ahL59++LMmTNYunQp5s+fD7lUzxZJKrvHvP4/soQEGVQq48xj4OjoiK+++gpTpkzBli1b0KdPn8LvlIjIBEVERODXX39Fjx490Lx585duq1AAby8dhJ2Xf0WW5r9T71YW1njb9z0oFOuKOK1+kkyId/fuXXh5eeldt3btWvTv3x8AcPDgQXzzzTe4evUqKleujOHDh+sdEpYXTohXsiQnZ89XkJekJMDR0TiP9fTpU3h6esLV1RVXr16FpaWlcXZMRGRChBA4dOgQfHx84O3t/crta/9YG9efXM+1vFa5Woj8MtJouQz5/JakkCkuLGRKluIsZABg0qRJWL16NY4fPw4fHx/j7ZiIyEwps5RQqXNPGCO3lENhZbypfU1+Zl8iczBu3Djcvn2bRQwRlTgZGRno0aMHTp8+bdD9FFYKONo45roZs4gxFAsZojzY29tD8f+dbtjpl4hKkqVLl2LHjh04efKk1FEKjYUMmQ25HMhjCiG4uKDIeswHBQWhZcuW0Gg0RfMARETFKCEhAdOnT4eHhweGDx8udZxCYyFDZkOhAGJisvvCvHiLiTHulVefZ2FhgXPnzmHPnj1F8wBERMVo5syZSExMxMyZM7WtzuaMnX2JXiEuLg6enp6oU6cOwsPDzW7WSyKiHHfu3EHt2rXh6+uLs2fPwsLCNNsz2NmXyIgqVaqEwMBAREREYP/+/VLHISIqsN9//x1ZWVmYP3++yRYxhmKLDFE+xMbGwtvbGw0aNEBYWBhbZYjIbN25cyfPudxMBVtkiIysSpUqGDx4MNRqNZ48eSJ1HCIigwghoFJlz/9i6kWMoVjIEOXT/Pnzce7cOZQvX17qKEREBjl06BBq1aqFsLAwqaMYHQsZonyytbXVnlJKT0+XOA0RUf7NmjULMTExqFKlitRRjI6FDJEBNBoN3nvvPbzzzjtSRyEiypeTJ0/ir7/+Qp8+fVC1alWp4xgdCxkiA1hYWKBSpUr4888/ceLECanjEBG90uzZsyGTyTB27FipoxQJFjJEBpowYQIsLS0xbdo0qaMQEb3UxYsXceDAAXTv3h21atWSOk6RYCFDZKDq1aujd+/eOHr0aIm4TgkRlVyRkZFwdHTEhAkTpI5SZDiPDFEBXL9+HXXr1kWHDh1w6NAhqeMQEeUpLS0NdnZ2UscwCOeRISpitWrVwscffww7OzsolUqp4xAR5ZIzb4y5FTGGYiFDVEDr1q1DaGhoibjoGhGVLLGxsahatSpWr14tdZQix0KGqICsrKwAAGq1GgkJCRKnISL6z8KFC/Ho0SNUqlRJ6ihFjoUMUSGkp6ejYcOGGDhwoNRRiIgAAAkJCVi+fDnq16+Pzp07Sx2nyLGQISqEMmXKwMfHB3v27MGFCxekjkNEhB9//BFpaWkYP358qbjALUctERVSREQEGjdujO7duyMkJETqOERUiqWmpsLDwwPOzs64fv269hS4ueGoJaJi1KhRI7z33nvYuXMnLl++LHUcIirFbt++DUdHR4wdO9ZsixhDsZAhMoJJkyYBAGbOnClxEiIqzRo0aICbN2/q7bcXlRCFFqtaICohSoJkRYeFDJVqSiWQnJz7ZujUMM2aNUP37t3h7u6OEny2lohMWEZGBoDsEZXW1tba5TnHuW/2z0HYrav4Zv+cAh3nTBX7yFCppVQCbm6AvpHTLi5ATAxgyBQxQohS0bGOiEyPWq2Gr68vOnTogCVLlmiXG/s4V1zYR4YoH1Qq/X/cQPby/58UM99yipjU1FQ8evSokOmIiPIvJCQEkZGRKFu2rM5yYx/nTBELGSIjevDgATw9PTFu3DipoxBRKSGEwOzZs1GmTBmMGDFC6jjFjoUMkRFVrlwZ9evXx8aNG3H79m2p4xBRKXDw4EFcvHgRQ4YMQfny5aWOU+xYyBAZ2cSJE6FWq7Fo0SKpoxBRKTB79mxYW1sjKChI6iiSYCFDZGRvvvkmGjdujDVr1uDJkydSxyGiEiw5ORkA0KdPH1StWlXiNNJgIUOlllwOyO1T9K+zT4FcXrD9ymQyjB49Gunp6Vi2bFkhEhIRvZyjoyP++usv/PTTT3rXy+XZo5P0cXFBgY9zpqR0TPtHpIdCAXhMa42bj+7mWudR0RMKxT8F3ndAQAB++uknuLq6FiIhEVHenj17BltbWwCAjY2N3m0Uiuwh1vpGJ8nlpjn02lCcR4ZKNWWWEip17r9wuaUcCqsS8BdORCVWr169EBMTg0OHDqFMmTJSxzEqziNDlE8KKwUcbRxz3YxZxDx48AAajcZo+yMiioqKwo4dO2BnZ1fiihhDsZAhKkLbt2+Hh4cHDhw4IHUUIipB5s2bB41GgwkTJkgdRXIsZIiKUOvWrSGEwIIFC6SOQkQlRExMDNatW4eWLVuibdu2UseRHAsZoiLk5uaGTz75BCdOnMC5c+ekjkNEJcDChQuRmZmJb775htd3AwsZoiKXM0lVcHCwxEmIqCRIS0tDo0aN0LlzZ6mjmASOWiIqBp06dcLRo0cRFRUFT09PqeMQkZlTqVSQl4RJYPLAUUtEJmb06NFo3LgxEvK6DC0R0StkZGQgKysLAEp0EWMoFjJExaBjx44ICwtD48aNpY5CRGZq6dKl8PHxwdWrV6WOYlJYyBAVA5lMpu2Ux+svEZGhMjIyEBwcDKVSCW9vb6njmBQWMkTF6NNPP0X9+vWRkZEhdRQiMiMbN25EbGwsRo0aBUVJuK6AEbGQISpGDRs2xIMHD7BlyxapoxCRmVCr1Zg7dy7Kli2LwMBAqeOYHBYyRMVo6NChcHBwQHBwMErwgEEiMqKQkBBERUVh+PDhcHBwkDqOyWEhQ1SMnJycMGTIEFy+fBmHDx+WOg4RmYGnT5+iSpUqGDFihNRRTBLnkSEqZtHR0fD29kb79u1x5MgRqeMQkRnIysqClZWV1DGKDeeRITJh1apVwyeffAJnZ2eoVCqp4xCRCUtJSQGAUlXEGIqFDJEE1q1bhx07dnBSKyLK019//QU3NzeEhoZKHcWksZAhkoCFRfafnlqtRlpamsRpiMgUzZ49G6mpqfD19ZU6ikljIUNkREolkJwMRNy9haZL3kTE3VtITs5e/qKYmBjUqVMHU6ZMKfacRGTa/vnnHxw8eBDdu3eHj4+P1HFMGjv7EhmJUgm4uQH6Lqfk4gLExADPz2MlhICvry/u3buHe/fuwcnJqfjCEpFJ69u3LzZu3IgzZ86gWbNmUscpduzsSyQBlUp/EQNkL3+xX69MJsPo0aORkpKCVatWFX1AIjIL0dHR2LJlC9q3b18qixhDsZAhktAnn3wCV1dXLF68GJmZmVLHISITcO/ePXh4eGDs2LFSRzELLGSIJGRjY4MRI0bg/v372L59u9RxiMgEtG7dGtevX4e/v7/UUcwCCxkiiQUGBsLV1ZVXxSYipKenAwAsLS0hk8kkTmMeWMgQSczFxQXR0dGcfpyolFMqlahZsyZGjBiV79GPxEKGyGjkcsDFRf8gQBcXgZfNfWdtbQ0AyMjIKIpoRGQGNmzYgNjYWKxe7QEnJ6CxV3WEjziKxl7V4eSUPSqSxUxuLGSIjEShAGJiZEhKQq5bTIxMZ+i1Ptu3b0eVKlVw+fLl4glMRCZDrVZjwYIFcHYui/T0QXq30Tf6kVjIEBmVQgE4Oua+vaqIAQAvLy8kJCQgODi46IMSkUnZs2cPbt68iSFDvgBgL3Ucs8JChshENGvWDG3btsXmzZsRGxsrdRwiKiZCCMydOxc2NjYIDBwudRyzw0KGyISMHj0amZmZWLJkidRRiKiYJCcnQ6FQYMCAAahQoaLUccwOL1FAZEI0Gg3q1q2LuLg4REdHw8HBQepIRFRMVCoVlEo5Xna1kqSk7NPVJR0vUUBkpiwsLDBq1Cg4Ojri5s2bUschoiKmVCqR054gl8sLNfqxtGKLDJGJUalUkMlk2iHZRFRy9e/fHzdu3MDhw4dhb5/dyVep1D86SS7P38CBkoAtMkRmTC6Xa4sYtVotcRoiKir379/H5s2bYWNjoy1igMKNfiyNWMgQmahhw4ahbdu2KMGNpkSl2uLFi5GVlcWLQxYSCxkiE2VhYYFTp07hzz//lDoKERlZYmIiVqxYAV9fX7z99ttSxzFrLGSITNTXX38NmUyGBQsWSB2FiIxs+fLlSE1NxdixY3lxyEIqVCHTtGlTvPXWW8bKQkTPqVmzJrp27Yp9+/bh2rVrUschIiOKj4+Ht7c3evXqJXUUs1fgQub06dM4f/48jh8/jsjISGNmIqL/N3r0aADAwoULJU5CRMYUHByMK1eucHSiERS4kFm3bh1atmyJOnXqYO3atcbMRET/r1WrVmjZsiVu3rwJjUYjdRwiKiSNRoOsrCwAgILDkIyiQIWMUqnEjh070K9fP/Tt2xebNm3iyAqiInLgwAEcO3YMFhbs0kZk7vbs2YMaNWrg1KlTUkcpMQp0ZNy1axeUSiV69eqF3r17Iy4uDocOHTJ2NiIC4OzsrO0MyFYZIvOVc3HIhw8fonr16lLHKTEKVMisW7cO7733HhwdHeHm5oYOHTrw9BJREbp37x7atWvHvjJEZuzkyZMICwtD//79UalSJanjlBgGFzL379/HH3/8gX79+mmX9enTB3v37kViYqJRwxFRtooVK+LmzZtYtGgRMjIypI5DRAUwb948yGQyBAUFSR2lRDG4kNmwYQMqVqyoM4FPt27dIJfLsWXLFqOGI6JsNjY2+OqrrxAbG4vNmzdLHYeIDHTlyhXs27cP3bp1Q82aNaWOU6IYXMisX78eH3/8sU7HQ1tbW3Tv3p2nl4iKUGBgIJycnDBv3jz2lSEyM9evX4ezszPGjBkjdZQSx6BC5vbt26hSpQoGDhyYa11gYCDs7e0RHx9vtHBE9B9HR0d89tlnuH79Ovbu3St1HCIyQLdu3RATE4PmzZtLHaXEkYkSPG7akMuAE5mDnNEOY8eOxeTJk6WOQ0T5kJWVBSsrK6ljmBVDPr85MQWRGXF1dcW9e/dYxBCZicTERHh6euKHH36QOkqJla8S8dGjRwbttGLFigUKQ0Sv5uLiAiB7ThlOkkdk2lasWIGYmBg4OztLHaXEytepJQsLC4OuzqlWqwsVylh4aolKqiNHjuCLL75AaGgofH19pY5DRHpkZGTA09MTVlZWuHXrFuRyudSRzIYhn9/5apFZs2aNTiGjVqsxePBgTJ48GZ6engUKSUT5E5UQhU9DP8WmbptQw6UGAMDJyQk3b97E/PnzsX79eokTEpE+mzZtwsOHDxEcHMwipggVqLOvWq2GtbU1zp07h8aNGxdFLqNgiwyVBL139sYvl3/BJ76fYHP3/+aQad++PU6ePIlbt26hWrVqEiYkKt2USkCl0l2m0WjQvHldxMU9xL179+Dg4CBNODPFzr5EJURUQhS2XdkGANh2ZRuiEqK068aNG4esrCwsWrRIqnhEpZ5SCbi5AU5OureyZe8jKkqNoUM/ZxFTxFjIEJmwyccmw0KW/WdqIbPA5GP/jVby9/dHgwYNsHLlSiQkJEgVkahUU6kA/X9+1aDRRGLUqInFHanUYSFDZKJyWmMyNZkAgExNpk6rjEwmw9ixY2FhYYHz589LGZWIdOQMeLFEmTJlJE1SGhSqkDFkJBMRGeb51pgcL7bK9OzZE9HR0ejQoUNxxyOiPAUA6IX/ChoqSvkatWRra6u3aGnVqlWu5TKZDGlpacZJR1SKhT8I17bG5MjUZCL8Qbj2ZysrK+38FEIIfrkgktxVALsBdANgKXGW0iFfhcy4ceN4gCQqZn/3v4DUZ6pcy+1tcw/jnDdvHrZv346///6bU6ETSWrB///Li0MWl3wd8aZMmVLEMYjoeUolUN1DgYQERa51Li5ATAygeG5Veno6wsPDsXPnTvTs2bMYkxKVbnJ59t9kdoffGACbALQB0AIuLtnrqWgZ1Efm8ePH2Lt3L9LT03OtS0pKwt69e5GcnGy0cESlVd4jIbKXvzhnxZdffglbW1vMnTsXJfg6sEQmR6HI/mKRlATU6vwOgEy0/lqBpKTcXzioaBhUyMjlcnz88cfYunVrrnWrVq3CwIEDYWtra7RwRJQ/5cuXx+DBgxEREYHff/9d6jhEpYpCATzKisL1W5eA8sBpxz/wKCuKRUwxMaiQcXR0RNeuXfVOib5hwwb06tUL1tbWRgtHRPk3atQoWFpaYu7cuVJHISp1Jh+bDOtPrIFBgKWlpc7oQipaBg+/7t+/P06ePIm7d+9ql124cAGXL19G//79jRiNiAzh6emJnj17IioqCk+fPpU6DlGpcfPJzf/mfLLNPecTFS2DC5kOHTrA3d0dGzdu1C7bsGED6tati6ZNmxot2PHjxyGTyXLdeKVforwtWbIEUVFRKFu2rNRRiEqNgbMGQrNSA8T9t+zFOZ+o6Bg8TlMmk6FPnz7YsGEDJk2aBLVajV9++QWjR48uinxYtWoV6tWrp/2ZsyRSaaA7EkLXy0ZCuLi4aP/PeWWIip4QAudCz0E8FID9f8tfnPOJik6BJpzo168fZs2ahVOnTuHp06dISEhAnz59jJ0NAFCvXj20aNGiSPZNZKpyRkK8ODoJyC5iXtaJMD09HUOHDoWLiwt++OGHogtJRDh16hSUd5XoP6g/vp/+vc46uSXHXheHAhUyNWvWROvWrbF+/XokJSXB398flSpVMnY2olJNoSjY0E1bW1vcuHEDly5dwsSJE1GxYkXjhyMiAEBwcDAAYNzocXC0cZQ4TelU4Gst9e/fH9u2bcPevXuLtJPvBx98AEtLS1SqVAlDhw7lVX6JXkEmk2HcuHFQKpVskSEqQlFRUdi9eze6dOmC2rVrSx2n1JKJAs6elZKSgkqVKsHOzg6xsbFGH3YdERGBzZs3o127drC3t0dYWBhmz56NqlWr4ty5c7CxsXnlPtzd3XH//n2j5iIyB2q1GnXq1EF8fDyio6Ph4OAgdSSiEmfDhg0YNGgQjhw5gnbt2kkdp0Qx5PO7wIUMABw6dAhyuRzt27cv6C4McuTIEXTq1Alr167V2wq0cOFCLFy4UPtzamoqEhMTiyUbkan5+eefERgYiIULF+Lrr7+WOg5RifTgwQO4urqyY72RFVshI4Vy5cqhV69eWLp06Su3ZYsMlWZKpRKenp7w8/PDtm3bpI5DRJRvhnx+F7iPjJRY+RK9mkKhQEREBIsYIiPLyMhAixYtsG7dOqmjEMyskDl06BASEhLw+uuvSx2FyCxUrlxZ+38za3wlMlm//PILwsLC8PjxY6mjEEz41NKnn34KLy8vNGnSBA4ODggLC8PcuXPh7e2NsLAwyPNxbXSeWiICrly5gmHDhmHcuHHo0qWL1HGIzJoQAg0aNMC///6Le/fuwcnJSepIJVKJOLVUr1497N69G3379sXbb7+NlStXYtCgQTh+/Hi+ihgiyubs7Kz9IkBEhXP48GFcvnwZgwcPZhFjIky2RcYY2CJDlG3QoEFYs2YN/ve//6FVq1ZSxyEyW506dcIff/yB27dvw8PDQ+o4JVaJaJEhIuPJuRYaW2WICu7JkycIDw9HQEAAixgTUqBLFBCRealTpw4++OAD7NmzB9euXUOdOnWkjkRkdsqVK4fo6GgkJSVJHYWewxYZolJi3LhxsLCwwJ9//il1FCKzZWdnhypVqkgdg57DFhmiUqJly5aIjo6Gm5ub1FGIzM7s2bPx6NEjzJgxA3Z2dlLHoeewsy9RKSSE4MSSRPmUlpaGqlWroly5coiMjISlpaXUkUo8dvYlojyFhoaiYcOGePLkidRRiMzCunXr8PTpU3z99dcsYkwQCxmiUiYjIwOXLl3CDz/8IHUUIpOnVquxaNEiuLi46L1YMUmPhQxRKdOjRw/UqFEDP/zwA5KTk6WOQ2TS9u7di1u3buGzzz5DmTJlpI5DerCQISplLC0tMX78eCQmJmLZsmVSxyEyaSEhIZDL5fjyyy+ljkJ5YGdfolJIpVKhevXqUKlUuHv3LmxtbaWORGSSNBoNLl68iEaNGkkdpVRhZ18ieim5XI4xY8ZAqVTi4sWLUschMlkWFhYsYkwcCxmiUmrIkCH4999/0aJFC6mjEJmcO3fu4KOPPsKlS5ekjkKvwEKGqJSytbWFs7MzgOx5ZYjoP99//z1CQkIQFxcndRR6BRYyRKXc7Nmz0bx5c6jVaqmjEJmExMRErF69Gg0aNMBbb70ldRx6BRYyRKVceno6zp49i9DQUKmjEJmEn3/+GampqQgKCuIM2GaAo5aISrnHjx/Dw8MDNWvWREREBA/cVKqpVCp4e3tDCIE7d+5ALpdLHalU4qglIsq38uXLIzAwEBcvXsSBAwekjkMkqaNHjyImJgbDhw9nEWMm2CJDRIiJiYGXlxeaNm2K//3vf2yVoVItPDwc3t7eKFu2rNRRSi22yBCRQVHPUpEAACAASURBVNzc3NC/f3/ExcUhPj5e6jhExSYqIQotVrVAVEKUdlmTJk1YxJgRtsgQEQAgKSkJdnZ2sLKykjoKUbHpvbM3frn8Cz7x/QTuZ9zx+uuvo3v37lLHKvUM+fzmEYuIAABOTk7a/2s0GlhYsMGWSraohChsu7INALD1+FZoftSgW7duLGTMDAsZolJCqQRUqtzL5XJAocj+v1qtRr9+/aBUKhESElK8AYmK2eRjk2Ehs4BaqCFOZ5+cCAoKkjgVGYpfuYhKAaUScHMDnJxy39zcstcD2VfGTktLw86dO3H58mVpQxMVoZzWmExNJpAKiAsCcAcq1q4odTQyEAsZolJApQISEvSvS0jQban55ptvAGTP+EtUUuW0xgAAzgJQA5atLTH52GRJc5HhWMgQkY5mzZqhY8eO2Lp1K6Kiol59ByIzFP4gPLs1RgPgPABnQF1LjfAH4VJHIwNx1BJRKZCcnH0aKS9JSYCj438/Hz9+HO3bt8eQIUPw888/F31AomKmzFJCpc5uioyNiUX0v9Fo0aoF5JZyKKwUEqcjjloiokLx8/NDq1atcPv2bY5gohJJYaXQFiyO3o6o7V1b4kRUUCxkiCgXmUyGgwcPwvH5ZhqiEubgwYO4evUqhg0bBjs7O6njUAHxaxZRKSCXA05l1XrXOZVVQ98lZXKKGCEEMjMzizIeUbETQuDbb7/FpEmTkJaWJnUcKgS2yBCVAgoF8PbSQdh5+Vdkaf4rSqwsrPG273tQKNbpvd/Dhw/RvXt3tGvXDjNnziymtERF7+DBg4iIiMDIkSNRsSKHXJsztsgQlRIXnvyNLHkCoEjR3rLkCbjw5O8871OhQgU8efIEP/74I5KSkooxLVHREUJg6tTpkMvlCAwcjeRkaG85cyqR+WCLDFEpcWHYBe0ojefJLfWcV/p/lpaWGD9+PAYMGIClS5dq55ghMmeHDh3DmTN/AwhE3bruOutcXICYmP9muybTx+HXRPRSmZmZqFGjBtLT0/Hvv/+iTJkyUkciKpT33++OX3/dA+AmAK9c61+cjoCKnyGf3zy1REQvZW1tjbFjx+Lx48dYuXKl1HGICu3nnzcC2A99RQyZHxYyRPRKAwcOhJubG2JiYqSOQlRo2a2K/lLHICNhHxkieiVbW1vcuHGDp5XIrIWHh2P9+vX48ssJACpLHYeMhC0yRJQvOUVMZmYm1Gr9c9IQmbKZM2diyZIlePw4XuooZEQsZIgo386ePQsfHx9s375d6ihEBrl8+TJ27dqFDz74AI0bN4CLi/7tXFygd4JIMl0sZIgo37y9vREfH49Zs2ZBo9FIHYco32bNmgUA+Pbbb6FQZA+xTkrKfePQa/PDQoaI8q1cuXIYNmwYLl++jH379kkdhyhfbty4gW3btsHf3x/NmjUDkF2sODrmvrGIMT8sZIjIIEFBQbCxscHMmTNRgqehohJk/fr10Gg0mDhxotRRqAiwkCEig1SuXBkDBw7EmTNncPToUanjEL3S9OnTcfToUbzxxhtSR6EiwEKGiAw2ZswYlC9fnjNnk1mwsLBA+/btpY5BRYSFDBEZzMvLC/fv30e/fv2kjkKUp9jYWHTr1g0XL16UOgoVIRYyRFQgNjY2AIC0tDSJkxDpFxwcjF27diE6OlrqKFSEWMgQUYH98ssvqFKlCsLDw6WOQqQjPj4ey5cvR8OGDdGlSxep41ARYiFDRAXWoEEDpKSkYNy4cRzBRCZl8eLFSE9Px7fffguZTCZ1HCpCLGSIqMB8fX3Rr18//PHHHzhy5IjUcYgAAE+fPsWSJUtQ+//au/OwqMr+f+DvYZkZEVAQMBGSFFRcCpESU3+apii5oLiC+nUrLcuMNM1EQDPJ1HJ53MrEhzQNlzIjxNwyLRV3xRRcchcERBEGmJn79wePkyOgI8ucGXi/rutcF9znzJn3HGDmw33Oue+mTdGvXz+p41AlYyFDROUyc+ZMKBQKTJkyhaP9kkmIj4/H/fv3MW3aNFhaWkodhyoZCxkiKrPUzFQM2D4Aw94ahuPHj+P777+XOhIRQkNDcezYMQwZMkTqKGQELGSI6JmpVMC9e8C0X6Jx8EIy0r1VePHFVlAo7KSORgQA8PHxgZWVldQxyAhkogpfoefm5sYBu4gqmEoF1K8PZGY+vkbA0VHGSfdIMnl5eQgKCsLEiRPRo0cPqeNQOTzL5zd7ZIjomRQUlFTEAIAMmZnA8eOnkZ2dbexYRPjmm2+QmJiI1NRUqaOQEbGQIaIKtA/t2r2EuXPnSh2EqpiHpzMfX1SqovX5+fmYO3cuXFxcMGbMGGnDklGxkCGiCvQqmjTxxpdffokbN25IHYaqiIenM2vVKr7Ur1+0/r///S+uXbuGSZMmoUaNGlJHJiNiIUNEFcgSkZHRyMvLQ1RUlNRhqIoo/XRmUXturhpz5syBo6Mjxo0bZ9xwJDkWMkRUoQIC3kCHDh2watUq/P3331LHoWrg+PEjuHHjBiZOnAg7O945V92wkCGiZyKXA46OJa9zdAQUChk+//xzaDQaTJs2zbjhqFry82uDixcvYsKECVJHIQnwJnsieiZKJXD9elF3/+Pk8qL1bdu2xYwZM9C1a1fjB6RqydXVVeoIJBEWMkT0zJTKp48Vw2tkqPIJAD2wcmVPTJr0rtRhSCI8tURElUYIge3bt2PPnj1SRyEzVvrpzG0AtuPKlYtGTkSmhCP7ElGluXPnDho0aAAPDw+cPHmSE/hRmalUwPC4Mdjy9xaotYWwlFmh1g9WyLmajUuXLvHUUhXDkX2JyCQ4OTnhgw8+QHJyMtasWSN1HDJj13JTsflSDNTyTEB5H5prWci8kI7+of1ZxFRzLGSIqFJ99NFHqFOnDmbMmIG8vDyp45CZitgdAQvZIx9ZvwOwAHJezpEsE5kGFjJEVKns7e0RHh6O69evY9GiRVLHITN15OYRFGoLi765D+AOgBeBc5pzUsYiE8BrZIio0uXn56Np06Z48OABrl69CoVCIXUkMjMqtQoFmn/v+c/NzUVebh7q1a0HpRWnW69qnuXzm7dfE1GlUygUiI2NRb169VjEUJkorZRQWikhhIBMJoO9wh5wkDoVmQKeWiIio2jfvj0aNWokdQwyY1qtFoGBgXjvvfeg1WqljkMmgoUMERmNEAIrV67ERx99JHUUMkPz589HQkIC1Go1LCz48UVFeI0MERlV165dsXPnTpw4cQItW7aUOg6ZiaNHj8Lf3x8NGzbE0aNHYWNjI3UkqkQcR4aITFZ0dDSEEJg6darUUchM5ObmIiQkBACwbt06FjGkh4UMERlV69atMWTIEMTHx3PqAjLI5MmTce7cOcyePRu+vr5SxyETw1NLRGR0Fy9eRNOmTdGqVSv89ddfkMlkUkciE5aUlIQVK1ZgxYoVvDammuDt189ICKFbyPTIZDLdQlVDw4YN8fbbbyM2NhYXLlyAp6en1JHIhPn5+cHPz0/qGGSiqnWPTG5uLtLS0pCfn89b+UychYUFFAoFXFxceH68isjKygIAODhwMBAqTqvVYvTo0QgNDcXrr78udRwyMvbIGCAzMxPp6emoU6cO6tWrByuransozIJarcb9+/dx9epVODs7w9HRUepIVE6PFjCFhYWwtraWMA2ZmsWLFyMmJgYWFhYsZOiJquWntxACGRkZcHV1hZ2dndRxyACWlpZQKBRQKBS4desWHBwceKqpipg/fz7+85//4OTJk7C1tZU6DpmAkydP4qOPPoKnpycWLlwodRwycdXyqikhBNRqNU9RmCEbGxuo1Wpez1SF1KxZE5cuXcKCBQukjkImIC8vD6GhodBoNFi7di2LW3qqalvIkHnjz7DqGD16NBo3bowvvvgCaWlpUschiU2ZMgWnT59GVFQUXnnlFanjkBmoloUMEZkOa2trREZ+hpycHMyY8Snu3YNuUamkTkfG5ubmhs6dO3PARDJYtbxrSaPR4Pz582jcuDEsLS0lSEZlxZ9d1aNSAa6uAllZbQEcBXAWQNHkko6OwPXrgFIpZUIyNq1Wy/FiqjlOUVANRUZGQiaTldgVGx0d/cwXxkZGRkLJTw8ygoICICtLBuBzAB4A/j29lJlZtJ6qNiEEoqOjcefOHQBgEUPPhL8tVczhw4cRHx9f7v2MGTMGv//+ewUkIjJURxT1xrSVOggZ2fLly/Hxxx9j5syZUkchM8RCpgpRKBRo164doqKiyr0vNzc3XmhHEnh4unAfgKtSBiEjOXv2LMLCwvDCCy/g008/lToOmSEWMhUoNTMV/t/4IzUzVbIMEREROHToEBISEkrd5pNPPoGPjw/s7Ozw3HPPoWfPnjh37pzeNo+eWlKpVLC3t8esWbOK7ev9999HvXr1oNFoAAAFBQWYMWMGGjZsCLlcDk9PTyxZsqQCXyFVfecBdAIwEgBH3K7K8vPzERISgoKCAnz33Xewt7eXOhKZIRYyFShidwQOXj+IiN0RkmXo2rUr2rZt+8RemVu3bmHy5Mn4+eefsWLFCqjVarz66qu689OPUyqV6Nu3L77//nu9do1Ggx9++AGDBw/WXXg7ePBgLFq0CO+++y7i4+MxZMgQTJw4EV9//XXFvUiq4hoDGANgJwAWwVVBaf/kTZ8+HcePH0d4eDheffVVidKR2RNVWP369UtsV6vVIjk5WajV6gp7rpSMFGEZZSkQCWEZZSlSMlIqbN+GiIiIEAqFQgghREJCggAgEhIShBBCzJkzR5T2o1ar1SI3N1fY2tqK//znPyXu79F9Hj16VNe2Y8cOAUAcOnRICCHEnj17BACxdetWved4//33haurq9BoNOV+nZXxsyNp5eUJYWGTJQDxyHJfAI0EoBTHjiVLHZHKKWRjiEAkRMjGEF1bYWGh6Ny5s/D39xeFhYUSpiNTVNrnd0nYI1NBInZHwEJWdDgtZBaS9soEBASgTZs2pfbKbN++Hf/v//0/ODo6wsrKCjY2NsjJycH58+dL3efrr78OFxcXrFu3Tte2bt06eHl54eWXXwYAJCYmwt7eHt27d4dardYtr7/+Om7cuGHwrXRUvSiVQMZtJa6m3Xtk0WLLtmWwsCjA6NFDUcBbl8xWamYqNpzZAADYcGaDrlfGysoKiYmJ2LZtG+e6o3JhIVMBHv6hFmoLAQCF2kK9P1gpRERE4M8//8SOHTv02pOSktCzZ0/Url0bq1atwoEDB3D48GE4OztD9YTRxywtLTFo0CCsX78eQgjk5+dj8+bNCA0N1W2TlpaGe/fuQS6Xw9raWrf06tULAHDlypXKebFk9mrbKuHmbK+3BL3RFVOnTsWJEyewb98+qSNSGT3+T96MXTOQkJAAIQQsLS1Rp04diROSuWMZXAEe/qFqhEbX9rBXZm3wWkky9ejRA6+88gqioqLQs2dPXfuWLVtQs2ZNbNmyRXddS2FhITIzM5+6z5CQECxevBi///47MjMzkZ2djZCQEN16R0dHODg4IDExscTHN2nSpJyviqqbiIgIBAcHw9fXV+ooVAYP/8l7+N5YqC3E+tj1+H7r95g/fz7CwsIkTkhVAQuZCnDk5hFdb8xDhdpCHLl5RKJERSIiIvDGG2/oDWyXm5sLKysrvQHy1q1bp7vr6En8/f3RsGFDrFu3DpmZmXj55Zfh5eWlW9+tWzfMnTsXMpkMrVu3rtgXQ9WSXC7XFTF3796FtbU1atasKXEqMtT07Z9Cll8LePj+mKmF+PUBbOrUxMiRI6UNR1UGC5kKcHzccRRoip/Dl1vKJUjzr8DAQPj5+WHnzp26tm7duuGrr77CW2+9hSFDhuD48eP48ssvUbt2bYP2OWTIECxduhQqlQpz5szRW9elSxcEBwcjMDAQkydPRqtWrZCfn4+///4bf/zxBzZv3lyhr4+qj3/++Qft27dHr169sHTpUqnjkAFUKiBuzFfQ5sb8r6UAwKsAjiIvZwNq1HCQLhxVKbxGpgIorZSwV9gXW5RW0g/xHxGhf9Fxjx49sGDBAiQmJqJnz57YsmULfvzxR9SqVcug/YWGhiIrKwsFBQUYNGhQsfXr16/HBx98gFWrViEwMBDDhw/Hpk2b0KlTp4p4OVRNubu7w8vLC8uWLcOvv/4qdRwyQEEBoM199B+kSABHAEyFyH+DU09QheGkkZx40KzwZ1d9XblyBS1btoSNjQ1Onz7Ni0RN3L17wL//H90F4IWiubT2A5AjOxvg+HdUGk4aSURVzvPPP48lS5bg1q1bGDduHKrw/2BVUG0AxwBsACDtKXeqeky6kElNTUVgYCBsbW3h5OSEd955Bw8ePJA6FhFJZOjQoQgODsbGjRuxbds2qePQU2kBPByGwg1AQwmzUFVlshf7Zmdno3PnznB1dUVcXBwyMzMRFhaG27dvY9OmTVLHIyIJyGQyLF++HP7+/ujRo4fUceipPgcwE0ACimY3J6p4JlvIrFixAunp6UhKSoKLiwsAoEaNGggODsaRI0d4ey9RNeXk5IRJkyYBgO700qPDCZBpOHBgF4DpAJoB8NNb5+gIyHmGiSqIyZ5aio+PR+fOnXVFDAD07t0btra27FImIty9exeDBg3CwoULpY5Cj7l+/TqGDx8MO7uaOHJkE7KzayI7G7rl+vWiqSmIKoLJFjLJycnw9vbWa7OyskLjxo1x9uxZiVIRkamwtrbGsWPHMHXqVCQnJ0sdh/6nsLAQgwYNQnp6OlavXg1f38awt4fewiKGKpLJFjJZWVklDtLm4OBg0HD6RFS11axZE7GxsSgsLMTQoZxY0lT88ssv2L9/Pz788EMEBwdLHYeqAZMtZMpiwYIFcHNz0y05OTlSRyKiSuTv749p06bh2LFjpc72TsYVFBSEhISEYiN/E1UWky1kHBwccPfu3WLtWVlZcHR0LPExYWFhuHbtmm6xtbWt7JhEJLEZM2agdevWiI6OxoEDB6SOUyWkZqbC/xt/pGamPn3j/7l69Sry8vIAAAEBAbC2tq6seER6TLaQ8fb2LnYtzMNRXR+/dob+tXPnTvTp0wd169aFtbU1nJyc0KVLFyxbtgz5+fl62z6cpsDZ2RlyuRz169fH4MGDsX//fonSEz07a2trxMbGomvXrnB1dQVQNM/PvXvFF5VK4rBmImJ3BA5eP4iI3RFP3xjAgwcP0KNHD3To0AGFhYVPfwBRBTLZQiYwMBC7d+9Genq6ru3nn39GTk4O3njjDQmTma6oqCi8/vrr0Gq1+PLLL7Fz5058/fXX8PLyQlhYGJYvX663bUBAACwsLLBkyRL89ttvmDdvHlQqFTp06CDhqyB6dt7e3khISICHhwdUKqB+/aLh8R9f6tdnMfM0qZmp2HBmAwBgw5kNT+2VEUJg7NixOHPmDAYMGMCeGDI+YaKysrJE/fr1Rdu2bUV8fLxYu3atqFu3rujTp4/B+6hfv36J7Wq1WiQnJwu1Wl1RcSX366+/CgDik08+KXH9hQsXxPbt24UQQmzfvl0AEJMnTy5x259++qnScpZXVfzZUcXRarViyZJVAogXgChxyc6WOqVpC9kYIqxnWgtEQljPtBYhG0OeuP3SpUsFANG7d2+h1WqNlJKqutI+v0ti0pNGnj9/HhMmTMC+ffugVCoxYMAAzJs3z+BrX4w1aaRKhRJncpXLjXebYdeuXXH69GlcvXoVVlZPHuewW7duOH78OK5duwa5mY1KxUkj6UnS09Ph5eWF7GwlgNMAnIptw8kKS3fmxgW8uMQPWqHRtVnILHHy3SQ0d21UbPtDhw6hffv2cHd3x5EjR0q805SoLJ5l0kiTHdkXABo3boyEhASpYzzRw27sku4Id3Q0zsBParUa+/btw4ABA55axDzctl+/fmZXxBA9jbOzM+bPX4oxY0IBjAWwEQBH/TWESgX4NnGBNidLr10LwHfxfWSnF38vmzlzJiwtLbFp0yYWMSQZk71GxlwUFJRcxABF7cYY2iIjIwP5+flwc3PTaxdCQK1W6xatVouMjAyoVCo8//zzlR+MSAL9+w8BMBDAZgCxEqcxHwUFQEGOXcnrcuxKfC/bsGEDfv31V/j4+FRyOqLSsZCpwvbu3Qtra2vdEhgYKHUkokpXNO/SMgD1ALyHf2dfpopy/vx5AEWDEnbq1EnaMFTtsZCpAurUqQOFQlHsfGLr1q1x+PBhHD58GL6+vrptlUolrly5IkVUokonlwMWNhYAYv7XkqZbZ2Fzl5MVltP27dvh7e2NJUuWSB2FCICJXyNDhrGyskL79u3x22+/Qa1W666TsbOzg5+fn+7rh9t26NABO3bsQEFBAa+ToSpHqQQybiuRk+ePrMwTcHB0BHAPQgjY2Sg5z085/PPPPwgJCYG9vT17eMlksEemivjwww9x69YtREZGPnXbSZMmIT09HeHh4SWu5+ziZO5q2yrh5myPlk084OZsj7y7t9Gn+2u4/s8FqaOZrfz8fAwYMACZmZmIjY1Fw4YNpY5EBIA9MuUmlxfdnVTaXUvG6vDo0aMHwsPDMWvWLJw4cQIhISFwc3PD/fv3kZSUhJMnT6JLly4Aim6/joiIQFRUFM6ePYuhQ4eiXr16uHHjBjZu3IhNmzZBq9UaJziREfz99984deoUXnvtNezcuRMtW7aUOpLJedp7WXh4GA4fPoxp06ahZ8+exg9IVAqTHkemvKrTODIPJSYmYsmSJfjrr7+QlZUFe3t7+Pj4YODAgRgxYgQUCoVu2+3bt2PRokU4ePAgsrOz4eLigo4dO2LChAnw9/c3bnADcRwZKqutW7eif//+sLe3x2+//cY7bUpQ2nvZ9esX0apVM7Rr1w6JiYn826NK9yzjyLCQ4R+kWeHPjsojPj4e/fr1g42NDXbs2IHWrVtLHalCpGamYujmofiu33fwdPSslOc4evQo3Nzc4OLiUin7J3rUsxQyvEaGiKqNwMBA/PTTT8jLy9Obe8wQZZkR2liedZJHQ927dw/Xr18HAPj6+rKIIZPEQoaIqpWAgADs378fS5cuNWj7hzNpT/slGgcvJGPaL9EmM5O2SgUcu3wB64/EAyo7rD8Sj2OXL1RINiEERo8eDV9fXw7XQCaNF/sSUbXzcFwlIQSmT5+O7t27lzjru/4UJN8A+AZxAOJgvClISvNvtkYAiqYV0ALwnVMx2RYuXIiNGzdiwIABcHd3r5DMRJWBPTJEVG1dvnwZixYtQvfu3bFnz55i601hCpLSVGa2P/74A5MnT0aTJk2watWq/42WTGSaWMgQUbX1wgsv6O7CCQwMxM6dO6WOJLlffvkFvXv3hlwux6ZNm3SDaRKZKhYyRFSttW3bFr/99hvkcjl69uyJxMREqSNJateuXQCALVu2oHnz5hKnIXo6FjJEVO298sor2LlzJ2rUqIGhQ4fiwYMHUkcyqhs3buhec3R0NE6ePIlu3bpJnIrIMLzYl4gIRZOs7tq1Cw8ePEDNmjUr7XlMaQBNANixYwdCQ0MRGBiImJgYWFtbw83NzfhBiMqIhQwR0f88Otrv2bNnkZycCkfHXhU2BYn+XVDF9/csdxqVd3oUjUaDmTNnYtasWbCzs0Pv3r0Ne2IiE8NChojoMUIIhIaG4tSpU1iz5nv07Nm/2DZl6UEx5E4jQ/epVBYVPmXp3bl9+zZCQkKwa9cutGrVCnFxcWjUqJFhT0xkYniNjJmTyWRPXSIjI3H58mXIZDKsX79e6shEJk8mk2HdunVwdnbG8OGDER+/Hvb20FukGj/mUUoliuUyJNvIkSOxa9cuvP322zhw4ACLGDJr7JExc3/++afe9x07dsSwYcMwZswYXZubmxvUarWxoxGZtaZNm2Lv3r147bXXEBoaCrVajaFDh0odq8yEELrxYBYtWoTDhw9jyJAhEqciKj8WMmbu8VmqZTIZ3NzcirVfvnzZiKlKl5+frzcDN5Ep8/Lywt69e9G5c2cMHz4cbm5u6NSpk9SxntmdO3cwbNgwjBo1CgMGDICnpyc8PStnckkiY+OppWqmoKAAYWFhcHJygouLC958803k5ubqbXPv3j1MmDABbm5uUCgUaNGiBX744Ydi+/rxxx/h6+sLpVIJZ2dnvPnmm8jKytKtf3g669tvv8X48ePh7OwMDw8PfPXVV6hRo4betkDRm61CocCyZcsq58UTlUGjRo2wd+9eTJw4Ee3btwcA/PPPP8X+bkzV/v374ePjg4SEBPzxxx9SxyGqcCxkqpnw8HDk5uZi3bp1mDJlCtasWYNPP/1Ut76wsBDdunXDpk2bEB4ejm3btqFjx44YPHiw3kBhW7duRb9+/fDCCy9g8+bNmDlzJuLi4tCjRw9oNBq955w+fTpycnIQGxuLlStXYvjw4QCA7777Tm+7NWvWwMrKCiEhIZV4BIienYeHBxYsWAArq6JO7FGjRqFBgwaIiIhAWlqawfuRywG57f2S19nef+a7oJ5ECIF58+ahY8eOyMzMxOrVq7Fw4cKKewIiUyGqsPr165fYrlarRXJyslCr1SWub9asWYlLSkqKEEKIlJSUUrd5KCEhocT1vXr10m2zZMmSUh9fVgqFQkRERBRrv3TpkgAg+vTpo9c+aNAg4enpqfs+JiZGWFhYiGPHjult16dPH9GmTRvd961atRK+vr5Cq9Xq2jZv3iwAiK1bt+o952uvvVYsz7Bhw8RLL72k1+bt7S2GDx/+xNf3tJ8dUWXTarVi8eLF4oUXXhAAhEKhEG+99Zb4+++/DXq814KWAlPtii1eC1pWaM7BgwcLAKJp06bi1KlTFbpvospW2ud3SdgjU80EBATofd+sWTNcvXpV931iYiKaNWuGFi1aQK1W65auXbvi6NGj0Gg0yMnJwfHjxzFw4EC9yeSCgoJQo0YN7Nu3T+85ShqfYuzYsThx4gSSkpIAFHV/nz17Vu8iZSJTJJPJ8O677yIlJQVxcXHw8fHBypUr0bx5c9y6deupwu2SFQAAEEpJREFUjz/53iFkR14rtpx871CF5uzWrRtCQ0Nx+PBhtGjRokL3TWRKeLFvCc6cOfPE9Z6enk/dJiAg4KnbjB8/HuPHj3/mfOXh4OCg971cLkd+fr7u+7S0NJw+fRrW1tYlPv7mzZsAirqtn3vuOb11MpkMLi4uxa59qVu3brH9tGvXDs2bN8c333wDPz8/fP3112jatCk6dOhQptdFZGyWlpbo378/goODceDAARw4cED3N/HTTz8hPz8f/fr1052OekhppYTSquLv3RZCYMWKFQgMDMTzzz+PkSNHYsSIEZy5mqo8FjKkx9HREc2bN0dMTEyJ611cXFBQUACZTIbbt2/rrRNCIC0trVixVNob6dixYzF9+nREREQgLi4OUVFRFfIaiIxJJpOhXbt2aNeuna4tMjISx48fh4eHBz744AOMGjUKtra2Ff7cQghkZGQgNTUVCxYsQFxcHEJCQrB27VpdNqKqjqeWSE+3bt1w6dIl1K1bF35+fsUWuVwOW1tb+Pj4IC4uTu+xW7duRV5ensG9KsOGDYNarcbAgQNRWFiI//u//6uMl0RkdImJiYiMjMSDBw/w/vvvw93dHR9//HGx3kpDCCFw584d/Pnnn4iNjUVhYSEAYO/evXBwcICzszPatm2LuLg49O/fH0uXLq3ol0Nk0tgjQ3qGDRuGVatWoVOnTvjwww/h7e2N+/fv4/Tp07h8+TJWrlwJoOg/zqCgIAwcOBAjR47ElStXMHXqVLRp0waBgYEGPVft2rUxaNAgrF69GsHBwXB2dq7Ml0ZkNM7OzoiIiMBHH32E2NhYzJ8/H0uWLMGUKVMAAFqtFhYW//4f+bBnRaFQwM7ODiqVCqNGjUJKSgpSU1Nx9+5d3bZt2rRB48aN4erqCh8fH3h6esLLyws+Pj7o1q0be2Go2mEhQ3rkcjl27NiBWbNmYd68ebh27RocHBzQsmVLjBw5Urdd7969dbddBwUFwd7eHsHBwfjiiy9gaWlp8PP17dsXq1ev5kW+VCXVqFEDb731FsaMGYOzZ8+idu3aAICIiAgcPHgQTk5OesXKmjVrMHz4cCgUCsTHx6NmzZp46aWXdMWKl5eX7pozLy8v7NmzR8JXR2QaZEIIIXWIyuLm5oZr164Va9doNDh//jwaN278TB+6VPHGjRuHhIQEXLx4Ue8/1NLwZ0dVwdtvv42VK1dCq9XC1dVVV6QMHz5cd2pWpVJBaQoTOhFJoLTP75KwR4YkcezYMZw8eRKrV69GdHS0QUUMUVWxbNkyfPbZZ5DL5ahZs2aJ27CIITIMCxmSRN++fZGeno6BAwfi3XfflToOkdE9fncfEZUNCxmShKlMYklEROaN/flERERktljIEBERkdmqloUMx1kwf/wZEhERUI0LGSsrK+Tm5kodhZ5Rbm4urKysWMgQERGAanqxr0wmQ506dXDjxg3UqVMHdnZ2xSZ2I9OiVqtx//59ZGRkwNnZmYUMEREBqKaFDFA0OaJSqURaWhoyMjKg1WqljkRPYGFhAYVCAXd3d9jY2Egdh4iITES1LWQAwMbGBh4eHhBC6BYyPTKZTLcQERE9qloXMg/xQ5KIiMg8VcuLfYmIiKhqYCFDREREZouFDBEREZktFjJERERktljIEBERkdmSiSp8z7FCoYCzs7OkGXJycmBraytpBnPBY2U4HivD8VgZhsfJcDxWhivrsUpPT0d+fr5B21bpQsYUuLm54dq1a1LHMAs8VobjsTIcj5VheJwMx2NlOGMcK55aIiIiIrPFQoaIiIjMlmVkZGSk1CGqurZt20odwWzwWBmOx8pwPFaG4XEyHI+V4Sr7WPEaGSIiIjJbPLVEREREZouFDBEREZktFjJGsnnzZrRv3x5OTk5QKBRo2LAhwsLCkJWVJXU0k7Nx40b07dsXzz//PGxsbNC8eXPMnz8fhYWFUkczOampqRg3bhx8fX1hbW0NDw8PqSOZhNTUVAQGBsLW1hZOTk5455138ODBA6ljmRz+/hiO70uGkeKzzqrS9kx6MjMz0alTJ0yePBm1atXCqVOnEBUVhRMnTmDnzp1SxzMp8+bNg4eHB+bOnYu6deviwIEDmD59Ok6ePIk1a9ZIHc+knDlzBtu2bcMrr7wCIQQLYwDZ2dno3LkzXF1dERcXh8zMTISFheH27dvYtGmT1PFMCn9/DMf3JcNI8lknSDIrV64UAMQ///wjdRSTkpaWVqxt1qxZAoC4deuWBIlMl0aj0X09duxY0aBBA+nCmIjPP/9cKJVKcfv2bV3bpk2bBACRlJQkYTLTw98fw/F9qewq+7OOp5Yk5OjoCADsmnxMSdNKtG7dGgBw48YNY8cxaRYW/BN+XHx8PDp37gwXFxddW+/evWFra4tt27ZJmMz08PfHcHxfKrvK/qzjb7GRaTQaqFQqJCUlISoqCoGBgWjUqJHUsUze77//DrlczmNFT5WcnAxvb2+9NisrKzRu3Bhnz56VKBVVRXxfKp0xP+t4jYyR1alTB9nZ2QCAbt264YcffpA4kelLTk7GwoUL8dZbb8He3l7qOGTisrKyULt27WLtDg4OyMzMlCARVUV8X3oyY37WsUemjGJiYiCTyZ66bNy4Ue9xe/bswf79+7F8+XIkJyejV69e0Gg0Er0K4yjrsQKAO3fuICgoCJ6enoiOjpYgvXGV51gRkXFUt/elsjDmZx17ZMqob9++8Pf3f+p29evX1/vex8cHAPDqq6/Cx8cH/v7+2LJlC/r3718pOU1BWY/V/fv30aNHDxQUFGDPnj2oWbNmZUU0GWU9VvQvBwcH3L17t1h7VlYWvLy8JEhEVUl1fF8qC2N+1rGQKaNatWqhVq1a5dqHr68vZDIZUlNTKyiVaSrLscrPz0efPn1w+fJl/PHHH3B1da2kdKalIn6vqjtvb+9i18JoNBqcP38evXv3ligVVQXV9X2pvCr7s46nliS0f/9+CCHQsGFDqaOYFI1Gg8GDB+Pw4cOIj49HkyZNpI5EZiQwMBC7d+9Genq6ru3nn39GTk4O3njjDQmTkTnj+1LZVfZnHXtkjCQgIABdunRB8+bNoVAocOzYMXzxxRd48cUXERQUJHU8kzJ+/Hj8+OOPmDVrFjQaDf766y/dumbNmvHCukfk5uYiPj4eAHDx4kXk5ubqrp95+eWX0aBBAynjSWLs2LFYvHgx+vTpg/DwcGRlZSEsLAx9+vSBn5+f1PFMCn9/DMf3JcNI8llXKaPTUDHTp08XLVu2FLa2tsLW1la0aNFCREREiOzsbKmjmZwGDRoIACUuu3fvljqeSbl06VKpx2r16tVSx5PMuXPnREBAgLCxsRGOjo5i7Nix4v79+1LHMjn8/TEc35cMI8VnnUwIISqnRCIiIiKqXLxGhoiIiMwWCxkiIiIyWyxkiIiIyGyxkCEiIiKzxUKGiIiIzBYLGSIiIjJbLGSIiIjIbLGQIaIKcfbsWXTp0gU2NjZwd3dHdHQ0DB2maufOnXByckJOTk6lZhw3bhw8PDwM3j4lJQU1atTA5cuXKy0TEZUPCxkiKrf09HR07twZtWrVws8//4zw8HDMmTMHn332mUGPnzZtGt5//33Y2tpWctJn4+XlhaCgIEREREgdhYhKwbmWiKjc5s+fD6VSiQ0bNsDa2hpdunSBpaUlJkyYgHfeeQcODg6lPnb//v1ISkrCli1bnvgc+fn5UCgUFR39qcaMGYPu3btj7ty5qFu3rtGfn4iejD0yRFRuW7ZsQf/+/WFtba1rCw4ORl5eHhISEp742JiYGLRv3x6urq66tsuXL0Mmk+Hbb7/F+PHj4ezsrDsl9Ouvv6J79+6oW7cubG1t4ePjg//+97/F9nvu3Dl06dIFNWrUgLu7OxYsWFBsm+zsbIwbNw5ubm5QKBSoV68eevXqhaysLN02nTp1goODA7777rtnPSxEZATskSGiclGpVEhJSUGTJk2gVqt17ba2tnB1dcWpU6cwZMiQUh+fmJiI0NDQEtdNnz4dXbt2RWxsLAoLCwEUFTndu3fHxIkTYW1tjX379mH06NFQq9UYNWqULlPXrl1hbW2Nb7/9FkqlErNnz8atW7dgZfXv215YWBh++eUXzJkzB40aNUJaWhoSExOhUql021haWqJt27bYsWMHPvzww3IdKyKqeCxkiKhcMjMzIYTAm2++iTfffLPY+oyMjFIfe+vWLVy5cgUvvvhiieubNm2KNWvW6LW9/fbbuq+1Wi06duyIGzduYPny5bpCJiYmBteuXcOpU6fQvHlzAECHDh3QoEEDODs76x5/8OBBhISEYOTIkbq2/v37F8vh4+ODRYsWlfo6iEg6LGSIqELMmjUL3bt312vr27fvEx9z8+ZNAICTk1OJ63v37l2s7caNGwgPD0diYiJu3rwJjUYDAKhVq5Zum4MHD8Lb21tXxDx8jo4dOyI5OVnX5ufnh5iYGNStWxcBAQF46aWXIJPJij2nk5MT7t69C5VKBaVS+cTXRETGxUKGiMrF0dERMpkMLi4u8PPz01uXn59fapECQHcKp7SLeB+/uFar1aJXr164c+cOPvnkEzRp0gR2dnZYtmwZ1q5dq9vu5s2bcHFxKXF/jxYyixcvhouLC5YtW4apU6fiueeewzvvvINPPvkEFhb/XkL4sHjJy8tjIUNkYljIEFG5KJVKeHl5ISUlRa89IyMD6enpaNmyZamPdXR0BFB00W1JHu8duXDhAo4ePYq4uDi9U0CPXpsDAPXq1cOhQ4eK7e/27dt639vZ2WHu3LmYO3cuUlJSEBMTgxkzZsDd3R0jRozQbZeVlQVLS0vUrl271NdCRNLgXUtEVG79+vXD5s2bUVBQoGtbu3YtbGxsEBAQUOrjPDw8oFAoDB5wLjc3FwAgl8t1bXfv3sXWrVv1tmvTpg3Onj2r1/ty584d7N27t9R9e3l5Yfbs2XBwcNB7HABcunQJnp6eJZ52IiJpsUeGiMotLCwMMTExCA4OxsSJE3H+/Hl8/PHHmDZt2hPHkFEoFPDz80NSUpJBz+Pt7Q13d3dMmTIFWq0WarUan332GRwdHXH9+nXddiNGjMBnn32GXr16Yfbs2VAqlfj000+LZXn11VcRFBSEFi1aQKlUYuvWrbh79y66du2qt93hw4fRoUOHZzgiRGQs7JEhonJzdnbGrl27kJubi549e2L27NmYPn06pk2b9tTHDhgwANu3b4dWq33qtnK5HD/++CNq166NkJAQTJo0CUOHDsWwYcP0tlMqlUhMTESDBg0wYsQIvPfeewgNDUXPnj31tmvfvj3Wrl2LwYMHIygoCAcOHMD69ev1Cplbt27h2LFjGDBggIFHg4iMSSYMnQyFiKgSZGRkwN3dHT/99FOxnhBTsHDhQnz11Ve4cOGC3gXARGQa+FdJRJKqU6cO3nvvPXzxxRdSRylGrVZj4cKFiIiIYBFDZKL4l0lEkps6dSratWtX6bNfP6tr165hzJgxGD58uNRRiKgUPLVEREREZos9MkRERGS2WMgQERGR2WIhQ0RERGaLhQwRERGZLRYyREREZLZYyBAREZHZ+v833+OhH3PwRAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 432x288 with 0 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "from matplotlib.pyplot import figure\n",
    "import matplotlib\n",
    "figure(num=None, figsize=(8, 6), dpi=80, facecolor='w', edgecolor='k')\n",
    "plt.plot(theta_values, final_result_naive, 'g^', label = \"Naive\")\n",
    "plt.plot(theta_values, final_result_simultaneous, 'bs', label = \"GC\")\n",
    "plt.plot(theta_values, values_theory, 'k--', label = \"Theory\")\n",
    "plt.legend(loc='best')\n",
    "plt.xlabel('θ (rads)')\n",
    "plt.ylabel('<H>')\n",
    "plt.title('Deuteron <H> estimation, 4000 total shots')\n",
    "matplotlib.pyplot.locator_params(axis='y', nbins=6)\n",
    "plt.show()\n",
    "plt.savefig(\"Deuteron_results_4000.svg\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Compute and plot the difference from theory (many shots running on simulator)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "values_theory = [12.191751999999997, 13.15524, 13.462224, 13.381992, 12.837567999999997, 11.637923999999998, 10.217920000000001, 8.380472000000001, 6.38668, 4.4392, 2.5525520000000013, 0.8814480000000007, -0.42213999999999907, -1.3090319999999995, -1.7176839999999993, -1.5886079999999994, -0.9050319999999998, 0.2661680000000004, 1.5365760000000002, 3.4022159999999992, 5.413296000000001, 7.372232, 9.278692, 10.918935999999999]\n",
    "value_diff, value2_diff = [], []\n",
    "for theta in range(len(theta_values)):\n",
    "    value_diff.append(abs(final_result_naive[theta] - values_theory[theta]))\n",
    "    value2_diff.append(abs(final_result_simultaneous[theta] - values_theory[theta]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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OXNGHj9+vBwaGipHRUXJc+bMkW/fvq11WMLh58d5/F5ynqfPdzpZlmXlUx8iIiKijmFNChEREQmJSQoREREJiUkKERERCYlJChEREQmJSQoREREJiUkKERERCYlJChEREQmJSQoR3depU6cwduxYhIaGokePHli1ahWcbbH06aefIjo6GrW1tarGmJWVhaSkJKcff+7cOXTq1Anl5eWqxUREHcMkhYjaVVlZidTUVERERKCwsBBLly7FG2+8gZUrVzq1/+LFi7FgwQKEhYWpHKlrevfujczMTOTm5modChG1gXP3EFG71q1bB0mSUFBQgODgYIwdOxaBgYF4+eWXMXfuXERGRra575EjR1BSUoI9e/a0+xr19fUICQlROvT7mj17NiZMmIDVq1cjLi7O469PRO3jlRQiateePXswZcoUBAcH29ZNnjwZP/74I/bv39/uvvn5+RgxYkSrae/Ly8uh0+mwadMmzJs3DzExMbbbNB9//DEmTJiAuLg4hIWFYeDAgdiyZYvd8545cwZjx45Fp06d0KNHD+Tl5dk9pqamBllZWUhISEBISAgefPBBpKeno6qqyvaY0aNHIzIyElu3bnX1sBCRB/BKChG1yWQy4dy5c+jbty+ampps68PCwtC9e3ecPHkSzz77bJv7HzhwADNmzHC4LScnB+PGjcM//vEPNDY2AmhOYCZMmIBXXnkFwcHB+Pe//43nn38eTU1N+O1vf2uLady4cQgODsamTZsgSRJWrFiBq1evIijo7ldadnY2PvroI7zxxhvo2bMnrl+/jgMHDsBkMtkeExgYiJ/+9Kf417/+hd///vcdOlZEpDwmKUTUJqPRCFmW8cILL+CFF16w237z5s0297169Sp++OEHDBgwwOH2fv36YfPmza3W/e53v7P9t8ViwahRo3D58mW8/fbbtiQlPz8fFRUVOHnyJPr37w8AGDlyJBITExETE2Pb/9ixY5g+fTp+85vf2NZNmTLFLo6BAwfib3/7W5vvg4i0wySFiO5r+fLlmDBhQqt1kyZNanefK1euAACio6Mdbp84caLdusuXL2Pp0qU4cOAArly5ArPZDACIiIiwPebYsWNITk62JSjW1xg1ahTKysps61JSUpCfn4+4uDiMHz8eP/nJT6DT6exeMzo6GtXV1TCZTJAkqd33RESexSSFiNoUFRUFnU6H2NhYpKSktNpWX1/fZgICwHZbpa2C2HsLVS0WC9LT03Hjxg0sWbIEffv2RefOnfHWW29h27ZttsdduXIFsbGxDp+vZZKyYcMGxMbG4q233sKiRYvQrVs3zJ07F0uWLEFAwN1yPGti8uOPPzJJIRIMkxQiapMkSejduzfOnTvXav3NmzdRWVmJxx9/vM19o6KiADQXsDpy71WN8+fP47///S927NjR6rZMy1oYAHjwwQfxn//8x+75rl271urvzp07Y/Xq1Vi9ejXOnTuH/Px8vPbaa+jRowdmzZple1xVVRUCAwPRpUuXNt8LEWmDo3uIqF3PPPMMdu/ejYaGBtu6bdu2ITQ0FOPHj29zv6SkJISEhDjdLK2urg4AoNfrbeuqq6vx4Ycftnrc0KFDcerUqVZXTW7cuIHPP/+8zefu3bs3VqxYgcjIyFb7AcDFixfRq1cvh7eCiEhbvJJCRO3Kzs5Gfn4+Jk+ejFdeeQVnz57FH//4RyxevLjdHikhISFISUlBSUmJU6+TnJyMHj16YOHChbBYLGhqasLKlSsRFRWFS5cu2R43a9YsrFy5Eunp6VixYgUkScLrr79uF8vw4cORmZmJxx57DJIk4cMPP0R1dTXGjRvX6nHHjx/HyJEjXTgiROQpvJJCRO2KiYnBwYMHUVdXh6effhorVqxATk4OFi9efN99p06dik8++QQWi+W+j9Xr9di7dy+6dOmC6dOn49VXX8XMmTPxq1/9qtXjJEnCgQMHkJiYiFmzZmH+/PmYMWMGnn766VaPGzFiBLZt24Zp06YhMzMTR48exfbt21slKVevXsVXX32FqVOnOnk0iMiTdLKzE3AQEbno5s2b6NGjB/75z3/aXcEQwfr16/HXv/4V58+fb1VMS0Ri4L9KIlJN165dMX/+fKxZs0brUOw0NTVh/fr1yM3NZYJCJCj+yyQiVS1atAhPPvmk6rMgu6qiogKzZ8/Gc889p3UoRNQG3u4hIiIiIfFKChEREQmJSQoREREJiUkKERERCYlJChEREQmJSQoREREJiUkKERERCen/Adzp1GFgT9UZAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 640x160 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 432x288 with 0 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "from matplotlib.pyplot import figure\n",
    "figure(num=None, figsize=(8, 2), dpi=80, facecolor='w', edgecolor='k')\n",
    "plt.plot(theta_values, value_diff, 'g^', label = \"Naive\")\n",
    "plt.plot(theta_values, value2_diff, 'bs', label = \"GC\")\n",
    "plt.xlabel('θ (rads)')\n",
    "plt.ylabel('|Error|')\n",
    "plt.show()\n",
    "plt.savefig(\"Deuteron_error_4000.svg\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "7"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(['hi' for v1, v2 in zip(value_diff, value2_diff) if v1 > v2])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "20.340503999999992\n"
     ]
    }
   ],
   "source": [
    "print(sum(value_diff))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "21.96742025999999\n"
     ]
    }
   ],
   "source": [
    "print(sum(value2_diff))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
